Myślę, że Twoim problemem nie jest CONVERT_TZ
, ale FROM_UNIXTIME
.
FROM_UNIXTIME
przyjmuje jako argument liczbę całkowitą - co oznacza 32 bity.
Jeśli weźmiesz dzisiejszy unix-timestamp:1480546792
, przesunięte w prawo o 24 bity - właśnie przekraczasz limit 32 bitów dla prawidłowego parametru w unix_time
.
from_unixtime
może obsługiwać tylko parametry do 2147483647
- Co oznacza, że działa do 2038-01-19 04:14:07
Ja również spotkałem się z tym problemem, a od 2002 roku jego poprawka jest „w trakcie opracowywania”.
Dopóki nie zostanie to ostatecznie rozwiązane, powinieneś użyć obejścia, używając date_add
. Zamiast
from_unixtime (x)
użyj
date_add(from_unixtime(0), INTERVAL x second)
Wynik(i):
SELECT from_unixtime (2147483647); //2038-01-19 04:14:07
SELECT from_unixtime (2147483648); //NULL
SELECT date_add(from_unixtime(0), Interval 2147483647 second) //2038-01-19 04:14:07
SELECT date_add(from_unixtime(0), Interval 2147483648 second) //2038-01-19 04:14:08