結果、保存できなかった😢
SET sql_mode = STRICT_ALL_TABLES; CREATE TABLE time_leap ( dt datetime, ts timestamp ) ENGINE=InnoDB; INSERT INTO time_leap VALUES ('2012-06-30 23:59:59', '2012-06-30 23:59:59'); -- Query OK, 1 row affected (0.02 sec) INSERT INTO time_leap VALUES ('2012-06-30 23:59:60', '2012-06-30 23:59:60'); -- ERROR 1292 (22007): Incorrect datetime value: '2012-06-30 23:59:60' for column 'dt' at row 1
これを試そうと思ったのは、timestamp
型は内部表現がepoch秒なのでうるう秒保存するの無理だろうけどdatetime
型は秒の精度に6bit割いてるので[0, 64)
の範囲の値を保存できるだけの精度を持ってると思ったんですけど、よく見たらドキュメントに6 bits second (0-59)
って書いてたしどこかでバリデーションしてるんでしょうねきっと。
MySQL 5.6でDATETIMEの内部表現が8バイトから5バイトになったけど、その5バイト40ビットの使い切り方がすごいきれいに敷き詰めて無駄なく使い切ってるのに感動したのをみんなにも伝えたいのでこれ読んでください http://t.co/AyyphyP95G
— Ryuta Kamizono (@kamipo) December 6, 2013