Tôi nghĩ vấn đề của bạn không phải là CONVERT_TZ
, nhưng FROM_UNIXTIME
.
FROM_UNIXTIME
lấy một số nguyên làm đối số - có nghĩa là 32 bit.
Nếu bạn sử dụng dấu thời gian unix hàng ngày:1480546792
, chuyển sang phải 24 bit - bạn vừa vượt quá giới hạn 32 bit cho một tham số hợp lệ trên unix_time
.
from_unixtime
chỉ có thể xử lý các tham số tối đa 2147483647
- Có nghĩa là, nó hoạt động cho đến 2038-01-19 04:14:07
Tôi cũng gặp phải sự cố này và kể từ năm 2002, bản sửa lỗi cho vấn đề này là "đang được phát triển".
Cho đến khi nó cuối cùng đã được giải quyết, bạn nên sử dụng một giải pháp thay thế, bằng cách sử dụng date_add
. Thay vì
from_unixtime (x)
sử dụng
date_add(from_unixtime(0), INTERVAL x second)
(Các) kết quả:
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