为什么MySQL unix时间不能超过32位无符号整数限制?

Bry*_*eld 6 mysql int timestamp data-storage unix-timestamp

mysql> SELECT FROM_UNIXTIME(2145916799), FROM_UNIXTIME(2145916800), POW(2,32-1)-1, 2145916799 - POW(2,32-1)-1;
+---------------------------+---------------------------+---------------+----------------------------+
| FROM_UNIXTIME(2145916799) | FROM_UNIXTIME(2145916800) | POW(2,32-1)-1 | 2145916799 - POW(2,32-1)-1 |
+---------------------------+---------------------------+---------------+----------------------------+
| 2037-12-31 18:59:59       | NULL                      |    2147483647 |                   -1566850 | 
+---------------------------+---------------------------+---------------+----------------------------+
1 row in set (0.00 sec)

mysql> 
Run Code Online (Sandbox Code Playgroud)

第一个字段是我可以给出的最高值FROM_UNIXTIME.下一个字段是该值加上一个返回的字段NULL.第三个字段是无符号32位int的最高可能值.最终值是最高可能的UNIXTIME和最高可能的int之间的差异,这是一个超过18天的秒数.它似乎2037在当地时区结束时停止.有什么想法吗?在其中一项计算中,这是一个自然的突破点吗?这只是一个任意限制mysqld吗?

sha*_*han 5

通常unix时间戳范围是从1970年1月1日到2037年12月31日,欲了解更多信息,请访问http://en.wikipedia.org/wiki/Year_2038_problem