Trước phần còn lại của câu trả lời của tôi, tôi chỉ muốn khuyên bạn ngay bây giờ rằng nếu bạn có bất kỳ tùy chọn nào để thay đổi ứng dụng của mình để sử dụng UTC, điều đó sẽ giúp bạn tiết kiệm rất nhiều đau buồn trong hiện tại và trong tương lai.
Tuy nhiên, với bối cảnh câu hỏi của bạn, tôi giả định rằng đây không phải là một tùy chọn và bạn đang điều chỉnh một hệ thống được thiết kế để sử dụng MySQL trong môi trường máy chủ truyền thống, nơi bạn chỉ có thể thay đổi múi giờ và có mã logic mong muốn múi giờ này và không thể dễ dàng điều chỉnh để sử dụng UTC.
Nhưng nếu bạn thực sự cần nó để lưu trữ dưới dạng PST, hãy đọc tiếp.
Bạn nói đúng rằng mySql sẽ sử dụng múi giờ của máy chủ để lưu trữ dấu thời gian theo mặc định, tuy nhiên giả định của bạn rằng các bản sao RDS có múi giờ của chúng được đặt dựa trên vùng AWS mà chúng được khởi chạy là không chính xác - tất cả các phiên bản RDS đều được khởi chạy với múi giờ của chúng được đặt là UTC, và cấu hình này có thể 'không được thay đổi:
Vì vậy, tùy chọn duy nhất của bạn là đặt múi giờ trên mỗi kết nối mà ứng dụng của bạn thực hiện với cá thể cơ sở dữ liệu thành PST. Bạn có thể sử dụng SET SESSION time_zone = 'PST'
truy vấn để thực thi trong mọi kết nối mà ứng dụng thực hiện bằng cách làm theo hai bước tìm thấy tại đây
:
-
Tạo quy trình được lưu trữ sau (UTC-8 là PST):
-
Kết nối với phiên bản của bạn và chạy lệnh sau:
-
Bạn có thể cần cấp
EXECUTE
quyền đối với người dùng sẽ kết nối với cơ sở dữ liệu, nếu không, bạn có thể gặp lỗi kết nối:
Giờ đây, mọi truy vấn được thực thi dựa trên phiên bản RDS của bạn bởi bất kỳ ứng dụng nào sẽ sử dụng PST mà không cần sửa đổi bất kỳ logic ứng dụng nào và không cần cập nhật bất kỳ dấu thời gian nào đã được lưu trữ trước đó trong cơ sở dữ liệu.