Perché breve MySQL unix fermare il tempo dei 32 bit limite intero senza segno?
-
16-10-2019 - |
Domanda
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>
Il primo campo è il valore più alto possibile che posso dare a FROM_UNIXTIME
. Il campo successivo è che il valore più uno che restituisce NULL
. Il terzo campo è il massimo valore possibile per un senza segno a 32 bit int. Il valore finale è la differenza tra il livello massimo unixtime possibile e il più alto possibile int che è un po 'più di 18 giorni vale la pena di secondi. Sembra che si ferma alla fine del 2037
nel fuso orario locale. Tutte le idee perché? E 'questo un punto di rottura naturale in uno dei calcoli? È che solo un limite arbitrario in mysqld
?
Soluzione
normalmente gamma timestamp unix è dal 1 ° gennaio 1970 al 31 Dicembre 2037 Per ulteriori informazioni, dare un'occhiata a http://en.wikipedia.org/wiki/Year_2038_problem
Altri suggerimenti
ho ottenuto risultati molto diversi a GMT + 0200. stessi risultati sia per i686 e x86_64.
Propably 2038/01/01 UTC non era consentito.
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