Why does MySQL unix time stop to an unsigned 32-bit integer?

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> 

The first field is the maximum possible value that I can give FROM_UNIXTIME . The next field is a value plus one that returns NULL . The third field is the highest possible value for an unsigned 32-bit int. The final value is the difference between the highest possible UNIXTIME and the maximum possible int, which is just over 18 days in seconds. It seems like he stops at the end of 2037 in the local time zone. Any ideas why? Is this a natural break point in one of the calculations? Is this just an arbitrary limit in mysqld ?

+4
source share
2 answers

usually unix timeline from January 1, 1970 to December 31, 2037 for more information see http://en.wikipedia.org/wiki/Year_2038_problem

+5
source

I have very different results in GMT + 0200. The same results for i686 and x86_64.

Intermediate 2038-01-01 UTC is not permitted.

 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 
0
source

Source: https://habr.com/ru/post/1336505/


All Articles