¿Por qué el tiempo de MySQL unix no llega al límite de enteros sin signo de 32 bits?
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>
El primer campo es el valor más alto posible que puedo dar aFROM_UNIXTIME
. El siguiente campo es ese valor más uno que devuelveNULL
. El tercer campo es el valor más alto posible para un int de 32 bits sin signo. El valor final es la diferencia entre el UNIXTIME más alto posible y el int más alto posible, que es un poco más de 18 días de segundos. Parece que se detiene al final de2037
en la zona horaria local. Alguna idea de por qué? ¿Es ese un punto de ruptura natural en uno de los cálculos? ¿Es eso solo un límite arbitrario enmysqld
?