Tôi cần phải chuyển đổi một số trường TIMESTAMP thành INT trong MySQL (InnoDB) DB của chúng tôi. Tôi nhận ra rằng việc chuyển đổi TIMESTAMP thành INT là không bình thường, nhưng chúng tôi vẫn cần phải làm điều đó :)Mysql chuyển đổi TIMESTAMP thành INTEGER - múi giờ
Có vẻ như đủ để làm, nhưng có một số lỗi tiết kiệm múi giờ và ánh sáng ban ngày.
Tôi có tập lệnh tạo mã SQL cho mỗi cột. Ví dụ, nó tạo ra:
ALTER TABLE alarmLog ADD COLUMN started_tmp INT UNSIGNED;
UPDATE alarmLog SET started_tmp = UNIX_TIMESTAMP(started);
ALTER TABLE alarmLog DROP started;
alter TABLE alarmLog CHANGE started_tmp started INT UNSIGNED NULL DEFAULT 0;
Nếu tôi so sánh trước và sau khi sử dụng dữ liệu select FROM_UNIXTIME(1291788036);
, kết quả có vẻ tốt.
Ý tưởng là sau đó thay đổi tất cả phần mềm phía máy khách để chuyển thành UTC và sử dụng INT đó khi lưu trữ. Khi truy xuất, INT đó được chuyển đổi thành múi giờ hiện tại.
Nhưng sau đó các tài liệu warn me về kịch bản này (tiết kiệm ánh sáng ban ngày trong giờ CET):
mysql> SELECT UNIX_TIMESTAMP('2005-03-27 02:00:00');
+---------------------------------------+
| UNIX_TIMESTAMP('2005-03-27 02:00:00') |
+---------------------------------------+
| 1111885200 |
+---------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT UNIX_TIMESTAMP('2005-03-27 03:00:00');
+---------------------------------------+
| UNIX_TIMESTAMP('2005-03-27 03:00:00') |
+---------------------------------------+
| 1111885200 |
+---------------------------------------+
1 row in set (0.00 sec)
Làm thế nào để API và hệ điều hành bình thường đối phó với tiết kiệm ánh sáng ban ngày? Tôi biết máy tính của tôi có đồng hồ của nó trong UTC và trong thời gian mùa hè, hệ điều hành thêm hai giờ vào nó, và trong một thời gian mùa đông. Tôi giả sử nó sử dụng thời gian UTC để xác định cho dù đó là DST hay không.
Vì vậy, làm cách nào để giải quyết vấn đề này? Là giải pháp duy nhất để thêm một trường vào cơ sở dữ liệu để chỉ định bù DST?
Giờ mùa hè là múi giờ khác. Ví dụ. CET là Giờ Trung Âu, CEST là Giờ mùa hè Trung Âu. Hệ điều hành của bạn biết khi nào cần chuyển đổi. Miễn là bạn sử dụng UTC cho dấu thời gian, nó là đến lớp trình bày để chuyển đổi đó vào thời gian địa phương. –