Không, không thể thay đổi múi giờ cho một cơ sở dữ liệu trong một phiên bản MySQL.
Chúng tôi có thể truy xuất máy chủ và máy khách time_zone
cài đặt với một truy vấn, như sau:
SELECT @@global.time_zone, @@session.time_zone;
Chúng tôi cũng có thể thay đổi múi giờ ứng dụng khách cho một phiên hoặc thay đổi múi giờ cho toàn bộ phiên bản MySQL.
Nhưng chúng tôi cần phải nhận thức rõ ràng về hàm ý mà thay đổi này sẽ có trên các kết nối máy khách hiện có và cách thức DATETIME
và TIMESTAMP
các giá trị đã được lưu trữ trong phiên bản sẽ được diễn giải.
Để đặt time_zone của máy chủ khi khởi động phiên bản MySQL, chúng ta có thể sửa đổi /etc/my.cnf
tệp (hoặc bất cứ nơi nào các thông số khởi tạo phiên bản mysql được đọc từ đó), trong [mysqld]
phần:
[mysqld]
default-time-zone='+00:00'
- hoặc -
Cũng có thể (ít mong muốn hơn) thêm --default_time_zone='+00:00'
tùy chọn tới mysqld_safe
LƯU Ý: Thay đổi cài đặt múi giờ trên máy chủ MySQL KHÔNG thay đổi các giá trị được lưu trữ trong các cột DATETIME hoặc TIMESTAMP hiện có, NHƯNG vì nó thực sự thay đổi ngữ cảnh trong đó các giá trị được lưu trữ đó được diễn giải, nó sẽ giống như tất cả các giá trị đều ĐƯỢC dịch chuyển. (Trong đó 08:00 có nghĩa là 8 giờ sáng CST, với múi giờ của máy chủ được thay đổi từ CST thành GMT, cùng '08:00 'bây giờ sẽ được coi là 8 giờ sáng GMT, thực tế sẽ là 2 giờ sáng CST.
Cũng nên nhớ rằng các cột TIMESTAMP luôn được lưu trữ ở UTC, trong khi các cột DATETIME không có múi giờ. http://dev.mysql.com/doc/refman/5.5/en/datetime.html
Mỗi phiên khách hàng có thể thay đổi cài đặt múi giờ cho phiên của chính họ:
SET time_zone='-06:00';
Nhưng không điều nào trong số này thực sự "giải quyết" được vấn đề chuyển đổi múi giờ, nó chỉ xoay chuyển vấn đề chuyển đổi xung quanh.
Vốn dĩ không có gì là "xấu" với các chuyển đổi múi giờ xử lý lớp ứng dụng; đôi khi, đó là nơi tốt nhất để xử lý. Nó chỉ cần được thực hiện một cách chính xác và nhất quán.
(Điều kỳ lạ về thiết lập mà bạn mô tả là ứng dụng đang lưu trữ các giá trị DATETIME như thể múi giờ của máy chủ MySQL được đặt thành GMT, nhưng múi giờ của máy chủ MySQL được đặt thành thứ khác.)