2017-06-13 50 views
0

我有一個PHP腳本設置MySQL會話的時區。我檢查了輸出,它正確發送偏移量,+1:00(歐洲/倫敦在DST)。但是,當我讀取已放入數據庫的時間戳時,它已經晚了八個小時。這是爲什麼發生?SQL是由PHP設置的時區後面8小時

MySQL服務器將時間戳設置爲默認值。

+1

「默認值」是服務器的值。在服務器上設置的時區是什麼? (在命令行中使用'date',它應該顯示時區) – aynber

+0

@aynber我無法訪問命令行,因爲這是共享服務器。 – StellarDoor5319

回答

1

更新數據庫參數:

SET GLOBAL time_zone = 'Europe/London'; 
// OR: SET time_zone = 'Europe/London'; 
// OR: SET @@session.time_zone = 'Europe/London'; 

更新時區直接在請求:

SELECT ..., CONVERT_TZ(field, 'GMT', 'Europe/London') FROM ... 

定義在項文件(如index.php)適當的時區:

date_default_timezone_set('Europe/London'); 

此外,它可以在服務器上完成(示例,Ubuntu):

sudo timedatectl set-timezone Europe/London 
# do not forget to restart all services: nginx|Apache, mysql, ... 
+0

由於我在共享服務器上,因此我沒有使用'GLOBAL'的權限。但是,我已經運行了沒有GLOBAL的第一個命令 - 但是我傳遞了'+1:00'的值。 – StellarDoor5319

+0

@ StellarDoor5319在這種情況下,您可以直接爲您的賬戶更改參數(刪除'GLOBAL')。也可以在數據庫中轉換所有值:'CONVERT_TZ(field,'GMT','Europe/London')' – FieryCat

+0

我已更新答案;) – FieryCat

1

MySQL參考timezone mentioned on their website,向您展示瞭如何設置它。

對於懶惰的

的MySQL> SET的time_zone =時區;

+0

我的PHP腳本已經將此命令作爲'multi_query()'語句的一部分運行。 MySQL插入後直接運行。 – StellarDoor5319