为什么MySQL unix时间短于32位无符号整数限制?
第一个字段是我可以从\u UNIXTIME给为什么MySQL unix时间短于32位无符号整数限制?,mysql,timestamp,int,data-storage,unix-timestamp,Mysql,Timestamp,Int,Data Storage,Unix Timestamp,第一个字段是我可以从\u UNIXTIME给的最高值。下一个字段是该值加上一个返回NULL。第三个字段是无符号32位int的最高可能值。最终值是最高可能的UNIXTIME和最高可能的int之间的差值,即18天多一点的秒。它似乎在本地时区的2037末尾停止。你知道为什么吗?这是计算中的一个自然断点吗?这只是mysqld中的任意限制吗?通常unix时间戳范围是从1970年1月1日到2037年12月31日 有关更多信息,请查看我在GMT+0200时得到了非常不同的结果。i686和x86_64的结果相同
的最高值。下一个字段是该值加上一个返回NULL
。第三个字段是无符号32位int的最高可能值。最终值是最高可能的UNIXTIME和最高可能的int之间的差值,即18天多一点的秒。它似乎在本地时区的2037
末尾停止。你知道为什么吗?这是计算中的一个自然断点吗?这只是mysqld中的任意限制吗?通常unix时间戳范围是从1970年1月1日到2037年12月31日
有关更多信息,请查看我在GMT+0200时得到了非常不同的结果。i686和x86_64的结果相同
可能不允许使用2038-01-01 UTC
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>
好问题。可能与时区有关。从unix时间戳中获取2038-01-19 03:14:07之后的格式化日期的解决方法在美国东部时间的“我在”中进行了解释,这将解释差异。
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 |
+---------------------------+---------------------------+---------------+----------------------------+
| 2038-01-01 01:59:59 | 2038-01-01 02:00:00 | 2147483647 | -1566850 |
+---------------------------+---------------------------+---------------+------------------- ---------+
1 row in set (0.00 sec)
mysql> \s
--------------
mysql Ver 14.12 Distrib 5.0.77, for redhat-linux-gnu (i686) using readline 5.1