2013-10-08 98 views
6

這已被問過,但沒有找到答案。我將所有日期以UTC/GMT存儲在MYSQL中。當我提取引用時間是它更好地使用CONVERT_TZ構建數據論壇用戶...MySQL中時區處理的最佳做法是什麼?

SELECT CONVERT_TZ(mytime,'UTC',usertimezone) as mytime FROM table 

還是更臨時設置在MySQL中的會話區,然後進行正常的查詢?

SET time_zone = usertimezone; 

如果我使用第二個,我只是做一次爲每個用戶會話,或者如果我不使用一個持久開放的,我需要每個查詢之前設置呢?

+0

任何理由不讓這可以在客戶端,而不是做了什麼? –

+0

在顯示之前處理每個值都是很多工作。試圖做最少的編碼。 :) –

+0

您存儲用戶的時區,然後在將UTC轉換爲其時區時使用該時區。 – Kermit

回答

3

如果你的數據存儲在TIMESTAMP類型的列中,那麼你應該SET time_zone和MySQL將自動轉換爲/從UTC的檢索/插入—你不需要做更多的事情。這是推薦的方法。

如果你想要MySQL的基礎上, time_zone設置當前會話的做轉換
+0

我很少使用時間戳,而是使用日期時間。此應用程序是高容量數據收集,我想用完全相同的時間戳寫幾個記錄。 –

+1

@DougWolfgram:你仍然可以給'TIMESTAMP'字段提供一個給定的值([自動初始化和更新](http://dev.mysql.com/doc/en/timestamp-initialization.html)是* optional *),儘管默認情況下處於活動狀態)。 'DATETIME'是一個完全不同的野獸,並且不存儲任何時區的概念(所以MySQL *不能*執行到會話'time_zone'的任何隱式轉換)。 – eggyal

+0

我不知道。當我使用set_timezone將會話設置爲UTC時,它似乎強制插入日期時間進行轉換。 –

7
  • 使用TIMESTAMP

  • 使用DATETIME如果你正在返回UTC到您的應用程序爲它處理轉換那裏。 (這將是我的偏好。)

  • 不要嘗試將這些混合起來。 DATETIME不會與time_zone設置做任何事情,並且TIMESTAMP不能假設是UTC的時候,除非你絕對相信time_zone設置爲UTC返回到您的應用程序。

相關問題