不,不可能在MySQL實例中更改單個數據庫的時區.
您可以檢索服務器和客戶端time_zone設置:
SELECT @@global.time_zone, @@session.time_zone;
您還可以更改整個MySQL實例的客戶端時區或時區.
但要敏銳地了解現有客戶端連接的含義,以及如何解釋已存儲在實例中的DATETIME和TIMESTAMP值.
要在MySQL實例啟動時設置服務器time_zone,請在[mysqld]部分下修改/etc/my.cnf文件(或從中讀取mysql實例初始化參數的任何位置):
[mysqld]
default-time-zone='+00:00'
– 要么 –
將–default_time_zone =’00:00’選項添加到mysqld_safe
注意:更改MySQL服務器上的時區設置不會更改存儲在現有DATETIME或TIMESTAMP列中的值,但是因為它確實有效地更改了解釋這些存儲值的上下文,所以看起來所有值都會被移位. (其中08:00是指CST上午8點,服務器的time_zone從CST變為GMT,同樣’08:00’現在將被視為格林尼治標準時間上午8點,實際上是2AM CST.
每個客戶端會話都可以更改自己會話的時區設置:
SET time_zone='-06:00';
但這些都沒有真正“解決”時區轉換問題,它只會改變轉換問題.
應用層處理時區轉換沒有任何固有的“壞”;有時,這是最好的處理方式.它必須正確和一致地完成.
(您描述的設置有什么奇怪的是,應用程序存儲DATETIME值,好像MySQL服務器time_zone設置為GMT,但MySQL服務器time_zone設置為其他東西.)