MySQLのfrom_unixtimeは32ビットまでしか扱えない

  • このエントリーをはてなブックマークに追加

Databaseに記録されているUnixtimeを表示する時、次のようにfrom_unixtime()を使う事があります。

1
2
3
4
5
6
mysql> select from_unixtime(1500000000);
+---------------------------+
| from_unixtime(1500000000) |
+---------------------------+
| 2017-07-14 11:40:00 |
+---------------------------+

しかしfrom_unixtime2147483648以上の数値を扱えません。NULLを返します。

1
2
3
4
5
6
mysql> select from_unixtime(2147483648);
+---------------------------+
| from_unixtime(2147483648) |
+---------------------------+
| NULL |
+---------------------------+

こうするとdatetime型が返ってくるので表示されます。

1
2
3
4
5
6
mysql> select date_add(from_unixtime(0), interval 2147483648 second);
+--------------------------------------------------------+
| date_add(from_unixtime(0), interval 2147483648 second) |
+--------------------------------------------------------+
| 2038-01-19 12:14:08 |
+--------------------------------------------------------+