メモ:DATETIME型はMySQL 5.6からミリ秒の取り扱いが変わった

MySQL 5.6からミリ秒の取り扱いが変わった

バージョンによって挙動が異なるので注意が必要です。 MySQL 5.5 までは、強制的に切り捨てされて格納、MySQL 5.6 以降は四捨五入されて格納されるという動作になっています。

doruby.jp

以下、実験ログ

ysql> CREATE TABLE fractest( c1 TIME(2), c2 DATETIME, c3 TIMESTAMP(2) );
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO fractest VALUES  ('17:51:04', '2018-09-08 17:51:04.499', '2018-09-08 17:51:04');
Query OK, 1 row affected (0.03 sec)

mysql> INSERT INTO fractest VALUES  ('17:51:04', '2018-09-08 17:51:04.500', '2018-09-08 17:51:04');
Query OK, 1 row affected (0.03 sec)

// 2つめのレコードのみ、小数点第一位が四捨五入された

mysql> select * from fractest;
+-------------+---------------------+------------------------+
| c1          | c2                  | c3                     |
+-------------+---------------------+------------------------+
| 17:51:04.00 | 2018-09-08 17:51:04 | 2018-09-08 17:51:04.00 |
| 17:51:04.00 | 2018-09-08 17:51:05 | 2018-09-08 17:51:04.00 |
+-------------+---------------------+------------------------+
2 rows in set (0.00 sec)
/* https://sunrise033.com/entry/hatena-blog-how-to-hierarchicalize-categories */