Trước tiên, tôi đã viết về vấn đề này rất chi tiết trước đây, vì vậy vui lòng đọc câu trả lời của tôi tại đây và tại đây , cũng như bài đăng trên blog này của Lau Taarnskov .
Về vấn đề cụ thể đối với MySQL, bạn thường không muốn sử dụng TIMESTAMP
cho giờ địa phương của sự kiện trong tương lai, vì nó sẽ chuyển đổi từ múi giờ của phiên sang UTC tại thời điểm ghi và chuyển đổi ngược lại từ UTC sang múi giờ của phiên tại thời điểm đọc. Ngay cả khi đây là những id múi giờ giống nhau (không nhất thiết phải như vậy), không có gì đảm bảo rằng dữ liệu múi giờ sẽ không thay đổi đối với một hoặc cả hai múi giờ giữa thời điểm bạn ghi dữ liệu và khi sự kiện diễn ra.
Thay vào đó, hãy sử dụng DATETIME
, không có chuyển đổi múi giờ ngầm định. Bạn nhận được giá trị chính xác mà bạn đã viết. Lưu trữ giờ địa phương của sự kiện và lưu trữ VARCHAR
trường chứa định danh múi giờ cho sự kiện. Đây là cách duy nhất để duy trì ý định ban đầu của người dùng.
Cơ sở lý luận và các trường hợp cạnh tranh đều được mô tả trong các câu trả lời tôi đã đưa ra trước đây.