2012-10-25 31 views
3

我前幾天發表了一篇文章,並使用了從響應中給出的建議。我有一個大型的Web應用程序,它託管在我們的時區的服務器上,在那裏我使用了所有的datetime/timestamps到當前的時區。我應該使用UTC並將它在代碼級別上轉換爲適當的時區。MySQL時區混淆

嗯,我現在這樣做,但我有問題。我現在使用的服務器不在我的時區,TIMESTAMP(插入時)設置爲系統(O/S)時間。不是UTC時間。

爲什麼不:

SET time_zone = '+00:00'; 

修復插入TIMESTAMP值?我如何確保MySQL服務器將時間戳默認爲UTC?

解決:

這實在是令人困惑,因爲MySQL的自動轉換和顯示TIMESTAMP的數據庫,以目前的時區,所以我所有的時間戳轉換並顯示到系統時區。實際上,所有TIMESTAMPS存儲爲UTC。所以如果你去:

SET SESSION time_zone = '+00:00'; SELECT * FROM what_ever_table; 

它會顯示在該時區的時間戳。

+0

可能的重複http://stackoverflow.com/questions/4562456/mysql-setting-time-zone-in-my-cnf-options-file – Bryan

+2

@BryanMoyles號我不是所有者MySQL服務器,所以我不能更改配置文件。 – user1627928

回答

-2

MySQL在插入/更新值時不關心時區。它看到的只是時間/日期值和字符串。其標準日期格式中不包含時區數據:yyyy-mm-dd hh:mm:ss。當您檢索數據並想格式化數值時,時區只會進入畫面。使用convert_tz()函數

+1

我不明白。當我插入記錄時:'timestamp \t \t \t否\t CURRENT_TIMESTAMP'它使用系統(O/S)時區設置日期時間。這與UTC不同。但我希望它是UTC。 – user1627928

+0

如果我爲我插入當前日期/時間「2012-10-25 09:00:00」,mysql應該如何知道這是gmt-6,而不是來自其他時區的日期?標準的mysql日期字符串中沒有tz數據。您可以將tz含義附加到存儲的日期/時間值。 –

+2

「mysql應該如何知道這是gmt-6,而不是來自某個其他時區的日期?」因爲它使用SYSTEM的時區。你在說什麼。 – user1627928