- TiDBについて
- クイックスタート
- デプロイ
- 移行する
- 管理
- アップグレード
- 規模
- バックアップと復元
- BRツールを使用する(推奨)
- タイムゾーンの構成
- 毎日のチェックリスト
- TiFlashを管理する
- TiUPを使用してTiDBを管理する
- オンラインでConfiguration / コンフィグレーションを変更する
- オンラインの安全でない回復
- 監視と警告
- トラブルシューティング
- 性能チューニング
- システムチューニング
- ソフトウェアのチューニング
- Configuration / コンフィグレーション
- コプロセッサーキャッシュ
- SQLチューニング
- チュートリアル
- TiDBツール
- 概要
- ユースケース
- ダウンロード
- TiUP
- ドキュメントマップ
- 概要
- 用語と概念
- TiUPコンポーネントを管理する
- FAQ
- トラブルシューティングガイド
- コマンドリファレンス
- 概要
- TiUPコマンド
- TiUPクラスターコマンド
- 概要
- tiup cluster audit
- tiup cluster check
- tiup cluster clean
- tiup cluster deploy
- tiup cluster destroy
- tiup cluster disable
- tiup cluster display
- tiup cluster edit-config
- tiup cluster enable
- tiup cluster help
- tiup cluster import
- tiup cluster list
- tiup cluster patch
- tiup cluster prune
- tiup cluster reload
- tiup cluster rename
- tiup cluster replay
- tiup cluster restart
- tiup cluster scale-in
- tiup cluster scale-out
- tiup cluster start
- tiup cluster stop
- tiup cluster template
- tiup cluster upgrade
- TiUPDMコマンド
- 概要
- tiup dm audit
- tiup dm deploy
- tiup dm destroy
- tiup dm disable
- tiup dm display
- tiup dm edit-config
- tiup dm enable
- tiup dm help
- tiup dm import
- tiup dm list
- tiup dm patch
- tiup dm prune
- tiup dm reload
- tiup dm replay
- tiup dm restart
- tiup dm scale-in
- tiup dm scale-out
- tiup dm start
- tiup dm stop
- tiup dm template
- tiup dm upgrade
- TiDBクラスタートポロジリファレンス
- DMクラスタートポロジリファレンス
- ミラーリファレンスガイド
- TiUPコンポーネント
- TiDB Operator
- バックアップと復元(BR)
- TiDB Binlog
- TiDB Lightning
- TiDBデータ移行
- TiDBデータ移行について
- DMの概要
- 基本的な機能
- 高度な機能
- シャーディングされたテーブルからのデータのマージと移行
- GH-ost/PT-oscを使用するMySQLデータベースからの移行
- SQL式を使用してDMLをフィルタリングする
- DMアーキテクチャ
- ベンチマーク
- クイックスタート
- データ移行シナリオ
- デプロイ
- 管理
- ツール
- クラスターのアップグレード
- データソースを作成する
- データソースの管理
- データ移行タスクの管理
- シャーディングDDLロックを手動で処理する
- 移行するMySQLインスタンスを切り替えます
- 移行するテーブルのスキーマを管理する
- アラートを処理する
- デイリーチェック
- トラブルシューティング
- 性能チューニング
- 参照
- セキュリティ
- モニタリング指標
- アラートルール
- エラーコード
- FAQ
- 用語集
- 例
- リリースノート
- TiCDC
- Dumpling
- sync-diff-inspector
- TiSpark
- 参照
- クラスターアーキテクチャ
- 主要な監視指標
- セキュリティ
- 権限
- SQL
- SQL言語の構造と構文
- SQLステートメント
ADD COLUMN
ADD INDEX
ADMIN
ADMIN CANCEL DDL
ADMIN CHECKSUM TABLE
ADMIN CHECK [TABLE|INDEX]
ADMIN SHOW DDL [JOBS|QUERIES]
ADMIN SHOW TELEMETRY
ALTER DATABASE
ALTER INDEX
ALTER INSTANCE
ALTER PLACEMENT POLICY
ALTER TABLE
ALTER USER
ANALYZE TABLE
BACKUP
BEGIN
CHANGE COLUMN
COMMIT
CHANGE DRAINER
CHANGE PUMP
CREATE [GLOBAL|SESSION] BINDING
CREATE DATABASE
CREATE INDEX
CREATE PLACEMENT POLICY
CREATE ROLE
CREATE SEQUENCE
CREATE TABLE LIKE
CREATE TABLE
CREATE USER
CREATE VIEW
DEALLOCATE
DELETE
DESC
DESCRIBE
DO
DROP [GLOBAL|SESSION] BINDING
DROP COLUMN
DROP DATABASE
DROP INDEX
DROP PLACEMENT POLICY
DROP ROLE
DROP SEQUENCE
DROP STATS
DROP TABLE
DROP USER
DROP VIEW
EXECUTE
EXPLAIN ANALYZE
EXPLAIN
FLASHBACK TABLE
FLUSH PRIVILEGES
FLUSH STATUS
FLUSH TABLES
GRANT <privileges>
GRANT <role>
INSERT
KILL [TIDB]
LOAD DATA
LOAD STATS
MODIFY COLUMN
PREPARE
RECOVER TABLE
RENAME INDEX
RENAME TABLE
REPLACE
RESTORE
REVOKE <privileges>
REVOKE <role>
ROLLBACK
SELECT
SET DEFAULT ROLE
SET [NAMES|CHARACTER SET]
SET PASSWORD
SET ROLE
SET TRANSACTION
SET [GLOBAL|SESSION] <variable>
SHOW ANALYZE STATUS
SHOW [BACKUPS|RESTORES]
SHOW [GLOBAL|SESSION] BINDINGS
SHOW BUILTINS
SHOW CHARACTER SET
SHOW COLLATION
SHOW [FULL] COLUMNS FROM
SHOW CONFIG
SHOW CREATE PLACEMENT POLICY
SHOW CREATE SEQUENCE
SHOW CREATE TABLE
SHOW CREATE USER
SHOW DATABASES
SHOW DRAINER STATUS
SHOW ENGINES
SHOW ERRORS
SHOW [FULL] FIELDS FROM
SHOW GRANTS
SHOW INDEX [FROM|IN]
SHOW INDEXES [FROM|IN]
SHOW KEYS [FROM|IN]
SHOW MASTER STATUS
SHOW PLACEMENT
SHOW PLACEMENT FOR
SHOW PLACEMENT LABELS
SHOW PLUGINS
SHOW PRIVILEGES
SHOW [FULL] PROCESSSLIST
SHOW PROFILES
SHOW PUMP STATUS
SHOW SCHEMAS
SHOW STATS_HEALTHY
SHOW STATS_HISTOGRAMS
SHOW STATS_META
SHOW STATUS
SHOW TABLE NEXT_ROW_ID
SHOW TABLE REGIONS
SHOW TABLE STATUS
SHOW [FULL] TABLES
SHOW [GLOBAL|SESSION] VARIABLES
SHOW WARNINGS
SHUTDOWN
SPLIT REGION
START TRANSACTION
TABLE
TRACE
TRUNCATE
UPDATE
USE
WITH
- データ型
- 関数と演算子
- クラスター化インデックス
- 制約
- 生成された列
- SQLモード
- テーブル属性
- トランザクション
- ガベージコレクション(GC)
- ビュー
- パーティショニング
- 一時テーブル
- 文字セットと照合
- SQLの配置ルール
- システムテーブル
mysql
- INFORMATION_SCHEMA
- 概要
ANALYZE_STATUS
CLIENT_ERRORS_SUMMARY_BY_HOST
CLIENT_ERRORS_SUMMARY_BY_USER
CLIENT_ERRORS_SUMMARY_GLOBAL
CHARACTER_SETS
CLUSTER_CONFIG
CLUSTER_HARDWARE
CLUSTER_INFO
CLUSTER_LOAD
CLUSTER_LOG
CLUSTER_SYSTEMINFO
COLLATIONS
COLLATION_CHARACTER_SET_APPLICABILITY
COLUMNS
DATA_LOCK_WAITS
DDL_JOBS
DEADLOCKS
ENGINES
INSPECTION_RESULT
INSPECTION_RULES
INSPECTION_SUMMARY
KEY_COLUMN_USAGE
METRICS_SUMMARY
METRICS_TABLES
PARTITIONS
PLACEMENT_RULES
PROCESSLIST
REFERENTIAL_CONSTRAINTS
SCHEMATA
SEQUENCES
SESSION_VARIABLES
SLOW_QUERY
STATISTICS
TABLES
TABLE_CONSTRAINTS
TABLE_STORAGE_STATS
TIDB_HOT_REGIONS
TIDB_HOT_REGIONS_HISTORY
TIDB_INDEXES
TIDB_SERVERS_INFO
TIDB_TRX
TIFLASH_REPLICA
TIKV_REGION_PEERS
TIKV_REGION_STATUS
TIKV_STORE_STATUS
USER_PRIVILEGES
VIEWS
METRICS_SCHEMA
- UI
- TiDBダッシュボード
- 概要
- 管理
- アクセス
- 概要ページ
- クラスター情報ページ
- Top SQL
- キービジュアライザーページ
- メトリクス関係グラフ
- SQLステートメント分析
- 遅いクエリページ
- クラスター診断
- 検索ログページ
- インスタンスプロファイリング
- セッションの管理とConfiguration / コンフィグレーション
- FAQ
- CLI
- コマンドラインフラグ
- Configuration / コンフィグレーションファイルのパラメーター
- システム変数
- ストレージエンジン
- テレメトリー
- エラーコード
- テーブルフィルター
- トポロジラベルによるレプリカのスケジュール
- よくある質問
- リリースノート
- すべてのリリース
- リリースタイムライン
- TiDBバージョニング
- v5.4
- v5.3
- v5.2
- v5.1
- v5.0
- v4.0
- v3.1
- v3.0
- v2.1
- v2.0
- v1.0
- 用語集
日付と時刻のタイプ
TiDBは、時間値を格納するためにすべてのMySQL YEAR
および時刻データ型をサポートしTIME
DATETIME
DATE
、およびTIMESTAMP
。詳細については、 MySQLの日付と時刻のデータ型を参照してください。
これらの各タイプには有効な値の範囲があり、ゼロ値を使用して無効な値であることを示します。さらに、 TIMESTAMP
およびDATETIME
タイプは、変更時に新しい時間値を自動的に生成できます。
日付と時刻の値の型を扱うときは、次の点に注意してください。
TiDBはさまざまな形式を解釈しようとしますが、日付部分は、月-日-年または日-月-年ではなく、年-月-日(たとえば、「1998-09-04」)の形式である必要があります。
日付の年部分が2桁で指定されている場合、TiDBは特定のルールに基づいてそれを変換します。
コンテキストで数値が必要な場合、TiDBは日付または時刻の値を自動的に数値タイプに変換します。例えば:
mysql> SELECT NOW(), NOW()+0, NOW(3)+0; +---------------------+----------------+--------------------+ | NOW() | NOW()+0 | NOW(3)+0 | +---------------------+----------------+--------------------+ | 2012-08-15 09:28:00 | 20120815092800 | 20120815092800.889 | +---------------------+----------------+--------------------+
TiDBは、無効な値またはサポートされている範囲を超える値を、そのタイプのゼロ値に自動的に変換する場合があります。この動作は、SQLモードセットに依存します。例えば:
mysql> show create table t1; +-------+---------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+---------------------------------------------------------------------------------------------------------+ | t1 | CREATE TABLE `t1` ( `a` time DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin | +-------+---------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> select @@sql_mode; +-------------------------------------------------------------------------------------------------------------------------------------------+ | @@sql_mode | +-------------------------------------------------------------------------------------------------------------------------------------------+ | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +-------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> insert into t1 values ('2090-11-32:22:33:44'); ERROR 1292 (22007): Truncated incorrect time value: '2090-11-32:22:33:44' mysql> set @@sql_mode=''; Query OK, 0 rows affected (0.01 sec) mysql> insert into t1 values ('2090-11-32:22:33:44'); Query OK, 1 row affected, 1 warning (0.01 sec) mysql> select * from t1; +----------+ | a | +----------+ | 00:00:00 | +----------+ 1 row in set (0.01 sec)
さまざまなSQLモードを設定すると、TiDBの動作が変わる可能性があります。
SQLモード
NO_ZERO_DATE
が有効になっていない場合、TiDBでは、DATE
列とDATETIME
列の月または日をゼロ値にすることができます(例:「2009-00-00」または「2009-01-00」)。この日付型を関数で計算する場合、たとえばDATE_SUB()
またはDATE_ADD()
の場合、結果が正しくない可能性があります。デフォルトでは、TiDBはSQLモード
NO_ZERO_DATE
を有効にします。このモードは、「0000-00-00」などのゼロ値の保存を防ぎます。
次の表に、さまざまなタイプのゼロ値を示します。
日付型 | 「ゼロ」値 |
---|---|
日にち | '0000-00-00' |
時間 | '00:00:00' |
日付時刻 | '0000-00-00 00:00:00' |
タイムスタンプ | '0000-00-00 00:00:00' |
年 | 0000 |
無効なDATE
のDATETIME
は、SQLモードでそのような使用が許可されている場合、対応するタイプのゼロ値('0000-00-00'または'0000-00-00 00:00:00')に自動的に変換されTIMESTAMP
。
サポートされているタイプ
DATE
型
DATE
には日付部分のみが含まれ、時間部分は含まれず、 YYYY-MM-DD
の形式で表示されます。サポートされる範囲は「0000-01-01」から「9999-12-31」です。
DATE
TIME
タイプ
TIME
タイプの場合、形式はHH:MM:SS[.fraction]
で、有効な値の範囲は「-838:59:59.000000」から「838:59:59.000000」です。 TIME
は、1日の時間を示すだけでなく、2つのイベント間の時間間隔を示すためにも使用されます。分数秒の精度を指定するために、0〜6の範囲のオプションのfsp
値を指定できます。省略した場合、デフォルトの精度は0です。
TIME[(fsp)]
ノート:
TIME
の省略形に注意してください。たとえば、「11:12」は「00:11:12」ではなく「11:12:00」を意味します。ただし、「1112」は「00:11:12」を意味します。これらの違いは、:
文字の有無によって発生します。
DATETIME
タイプ
DATETIME
には、日付部分と時間部分の両方が含まれます。有効な値の範囲は、「0000-01-01 00:00:00.000000」から「9999-12-3123:59:59.999999」です。
TiDBはDATETIME
の値をYYYY-MM-DD HH:MM:SS[.fraction]
の形式で表示しますが、文字列または数値のいずれかを使用してDATETIME
の列に値を割り当てることができます。分数秒の精度を指定するために、0〜6の範囲のオプションのfsp値を指定できます。省略した場合、デフォルトの精度は0です。
DATETIME[(fsp)]
TIMESTAMP
タイプ
TIMESTAMP
には、日付部分と時間部分の両方が含まれます。有効な値の範囲は、UTC時間で「1970-01-0100:00:01.000000」から「2038-01-1903:14:07.999999」です。分数秒の精度を指定するために、0〜6の範囲のオプションのfsp値を指定できます。省略した場合、デフォルトの精度は0です。
TIMESTAMP
では、月の部分または日の部分にゼロを表示することは許可されていません。唯一の例外は、ゼロ値自体'0000-00-0000:00:00'です。
TIMESTAMP[(fsp)]
タイムゾーンの処理
TIMESTAMP
が格納される場合、TiDBはTIMESTAMP
の値を現在のタイムゾーンからUTCタイムゾーンに変換します。 TIMESTAMP
を取得する場合、TiDBは保存されているTIMESTAMP
の値をUTCタイムゾーンから現在のタイムゾーンに変換します(注: DATETIME
はこの方法では処理されません)。各接続のデフォルトのタイムゾーンはサーバーのローカルタイムゾーンであり、環境変数time_zone
で変更できます。
MySQLと同様に、 TIMESTAMP
のデータ型は2038年問題の影響を受けます。 2038を超える可能性のある値を格納する場合は、代わりにDATETIME
タイプの使用を検討してください。
YEAR
タイプ
YEAR
タイプは「YYYY」の形式で指定されます。サポートされている値の範囲は1901〜2155、またはゼロ値0000です。
YEAR[(4)]
YEAR
は、次のフォーマット規則に従います。
- 4桁の数字の範囲は1901年から2155年です
- 4桁の文字列の範囲は「1901」から「2155」です。
- 1桁または2桁の数字の範囲は1〜99です。したがって、1-69は2001-2069に変換され、70-99は1970-1999に変換されます。
- 1桁または2桁の文字列の範囲は「0」から「99」です。
- 値0は0000と見なされ、文字列「0」または「00」は2000と見なされます。
無効なYEAR
の値は自動的に0000に変換されます(ユーザーがNO_ZERO_DATE
SQLモードを使用していない場合)。
TIMESTAMP
とDATETIME
の自動初期化と更新
TIMESTAMP
またはDATETIME
の値タイプの列は、現在の時刻に自動的に初期化または更新できます。
テーブル内の値タイプがTIMESTAMP
またはDATETIME
の列の場合、デフォルト値または自動更新値を現在のタイムスタンプとして設定できます。
これらのプロパティは、列の定義時にDEFAULT CURRENT_TIMESTAMP
とON UPDATE CURRENT_TIMESTAMP
を設定することで設定できます。 DEFAULTは、 DEFAULT 0
やDEFAULT '2000-01-01 00:00:00'
などの特定の値として設定することもできます。
CREATE TABLE t1 (
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
NOT NULL
として指定されていない限り、 DATETIME
のデフォルト値はNULL
です。後者の場合、デフォルト値が設定されていない場合、デフォルト値は0です。
CREATE TABLE t1 (
dt1 DATETIME ON UPDATE CURRENT_TIMESTAMP, -- default NULL
dt2 DATETIME NOT NULL ON UPDATE CURRENT_TIMESTAMP -- default 0
);
時間値の小数部分
DATETIME
とTIMESTAMP
の値には、ミリ秒単位で正確な最大6桁の小数部分を含めることができます。 DATETIME
またはTIMESTAMP
タイプの列では、小数部分が破棄されるのではなく保存されます。小数部の場合、値は「YYYY-MM-DD HH:MM:SS [.fraction]」の形式で、小数部の範囲は000000〜999999です。小数部と小数部を区切るには小数点を使用する必要があります。休み。
type_name(fsp)
を使用して、小数精度をサポートする列を定義しTIMESTAMP
type_name
はTIME
、またはDATETIME
です。例えば、CREATE TABLE t1 (t TIME(3), dt DATETIME(6));
fsp
は0から6の範囲でなければなりません。0
は、小数部がないことを意味します。fsp
を省略した場合、デフォルトは0です。小数
TIMESTAMP
TIME
DATETIME
するときに、小数部の桁数が少なすぎる、または多すぎる場合は、状況に応じて丸めが必要になることがあります。例えば:mysql> CREATE TABLE fractest( c1 TIME(2), c2 DATETIME(2), c3 TIMESTAMP(2) ); Query OK, 0 rows affected (0.33 sec) mysql> INSERT INTO fractest VALUES > ('17:51:04.777', '2014-09-08 17:51:04.777', '2014-09-08 17:51:04.777'); Query OK, 1 row affected (0.03 sec) mysql> SELECT * FROM fractest; +-------------|------------------------|------------------------+ | c1 | c2 | c3 | +-------------|------------------------|------------------------+ | 17:51:04.78 | 2014-09-08 17:51:04.78 | 2014-09-08 17:51:04.78 | +-------------|------------------------|------------------------+ 1 row in set (0.00 sec)
日付と時刻のタイプ間の変換
日付と時刻のタイプを変換する必要がある場合があります。ただし、一部の変換は情報の損失につながる可能性があります。たとえば、 DATE
、およびDATETIME
の値はすべて、それぞれ独自の範囲を持ってTIMESTAMP
ます。 TIMESTAMP
は、UTC時間で1970年より前、またはUTC時間「2038-01-1903:14:07」より遅くてはなりません。この規則に基づくと、「1968-01-01」は有効な日付値DATE
またはDATETIME
ですが、 TIMESTAMP
に変換されると0になります。
DATE
の変換:
DATE
がDATETIME
またはTIMESTAMP
に変換されると、DATEには時間情報が含まれないため、時間部分「00:00:00」が追加されます。DATE
をTIME
に変換すると、結果は「00:00:00」になります。
DATETIME
またはTIMESTAMP
の変換:
DATETIME
またはTIMESTAMP
がDATE
に変換されると、時間と小数部分は破棄されます。たとえば、「1999-12-31 23:59:59.499」は「1999-12-31」に変換されますDATETIME
またはTIMESTAMP
がTIMEに変換されると、TIME
には日付情報が含まれないため、日付部分は破棄されます。
TIME
を他の時刻と日付の形式に変換すると、日付部分は自動的にCURRENT_DATE()
として指定されます。最終的に変換された結果は、 TIME
とCURRENT_DATE()
で構成される日付です。つまり、TIMEの値が「00:00:00」から「23:59:59」の範囲を超えている場合、変換された日付部分は現在の日付を示しません。
TIME
をDATE
に変換すると、プロセスは同様になり、時間部分は破棄されます。
CAST()
関数を使用すると、値をDATE
型に明示的に変換できます。例えば:
date_col = CAST(datetime_col AS DATE)
TIME
とDATETIME
を数値形式に変換します。例えば:
mysql> SELECT CURTIME(), CURTIME()+0, CURTIME(3)+0;
+-----------|-------------|--------------+
| CURTIME() | CURTIME()+0 | CURTIME(3)+0 |
+-----------|-------------|--------------+
| 09:28:00 | 92800 | 92800.887 |
+-----------|-------------|--------------+
mysql> SELECT NOW(), NOW()+0, NOW(3)+0;
+---------------------|----------------|--------------------+
| NOW() | NOW()+0 | NOW(3)+0 |
+---------------------|----------------|--------------------+
| 2012-08-15 09:28:00 | 20120815092800 | 20120815092800.889 |
+---------------------|----------------|--------------------+
日付に含まれる2桁の年の部分
日付に含まれる2桁の年の部分は、実際の年を明示的に示すものではなく、あいまいです。
DATETIME
、およびDATE
タイプの場合、 TIMESTAMP
は次のルールに従って、あいまいさを排除します。
- 01から69までの値は、2001から2069までの値に変換されます
- 70〜99の値は、1970〜1999の値に変換されます
これらのルールは、 YEAR
つのタイプにも適用されますが、1つの例外があります。
数字の00
をYEAR(4)
に挿入すると、結果は2000ではなく0000になります。
結果を2000にする場合は、値を2000に指定します。
MIN()
やMAX()
などの一部の関数では、2桁の年の部分が正しく計算されない場合があります。これらの機能については、4桁のフォーマットスイートの方が適しています。