Почему время Unix в MySQL не превышает 32-разрядного целого числа без знака? - PullRequest
6 голосов
/ 21 января 2011
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> 

Первое поле - максимально возможное значение, которое я могу дать FROM_UNIXTIME.Следующее поле - это значение плюс одно, которое возвращает NULL.Третье поле является максимально возможным значением для 32-разрядного целого без знака.Конечное значение - это разница между максимально возможным значением UNIXTIME и максимально возможным значением int, которое составляет немногим более 18 дней.Похоже, что он останавливается в конце 2037 в местном часовом поясе.Есть идеи почему?Это естественный перелом в одном из расчетов?Это просто произвольный предел в mysqld?

Ответы [ 2 ]

5 голосов
/ 21 января 2011

обычно диапазон отметок времени unix - с 1 января 1970 года по 31 декабря 2037 года. Для получения дополнительной информации см. http://en.wikipedia.org/wiki/Year_2038_problem

0 голосов
/ 21 января 2011

Я получил очень разные результаты в GMT + 0200. одинаковые результаты для i686 и x86_64.

Вероятно, 2038-01-01 UTC не было разрешено.

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
...