Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么MySQL unix时间短于32位无符号整数限制?_Mysql_Timestamp_Int_Data Storage_Unix Timestamp - Fatal编程技术网

为什么MySQL unix时间短于32位无符号整数限制?

为什么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的结果相同

第一个字段是我可以从\u UNIXTIME给
的最高值。下一个字段是该值加上一个返回
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