TIMESTAMP型とDATETIME型
MySQLの仕様
MySQLの日付をあらわす型にはTIMESTAMP型とDATETIME型があります。(DATE型もありますが…)
詳しくはMySQL :: MySQL 5.6 リファレンスマニュアル :: 11.3.1 DATE、DATETIME、および TIMESTAMP 型に記載されてます。
で、今日はじめて知った事↓
型 | サポート範囲 |
---|---|
TIMESTAMP | '1970-01-01 00:00:00' 〜 2037 年の一定の時点 |
DATETIME | '1000-01-01 00:00:00' 〜 '9999-12-31 23:59:59' |
型 | 消費バイト数 |
---|---|
TIMESTAMP | 4バイト |
DATETIME | 8バイト |
MySQLのTIMESTAMP型は、4バイトで保持できる一定の期間しか保持できないんですね。
試しに
- TIMESTAMP型とDATETIME型のカラムを持つテストテーブルを作る。
CREATE TABLE `date_test` ( `timestamp1` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, `datetime1` datetime default NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8
- 今日の日付でInsert
INSERT INTO date_test VALUES ( 20081119000000, 20081119000000 ); Query OK, 1 row affected (0.02 sec)
- 2999年でInsert
INSERT INTO date_test VALUES ( 20990101000000, 20081119000000 ); ERROR 1292 (22007): Incorrect datetime value: '20990101000000' for column 'timestamp1' at row 1
- いつからいつまでInsertできるか検証
INSERT INTO date_test VALUES ( 20380119000000, 20081119000000 ); Query OK, 1 row affected (0.01 sec)
あれ!?(今日の日付は2008年11月19日)
INSERT INTO date_test VALUES ( 20380120000000, 20081119000000 ); ERROR 1292 (22007): Incorrect datetime value: '20380120000000' for column 'timestamp1' at row 1 INSERT INTO date_test VALUES ( 19700101000000, 20081119000000 ); ERROR 1292 (22007): Incorrect datetime value: '19700101000000' for column 'timestamp1' at row 1 INSERT INTO date_test VALUES ( 19700102000000, 20081119000000 ); Query OK, 1 row affected (0.01 sec)