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