2011-07-15 20 views
2

我有一個論壇,用戶可以發表評論。創建評論時,其相應的日期時間值以UTC格式存儲。我打算在當地時間展示數據,比如'ASIA/SINGAPORE';MySQL:UTC自動映射到本地時區

2個選擇:

  1. 使用convert_tz每次查詢數據庫。我不喜歡 的方法,因爲它使我重寫每次查詢select_expr
  2. 使用SET time_zone = 'ASIA/SINGAPORE';

至於第二個選擇,我想知道什麼是指令(這裏沒有超級特權)的有效性範圍。更具體地說,如果我使用的是PHP應用程序,那麼配置無效,因爲我關閉數據庫連接?我應該每次查詢db都發出這個命令嗎?

Tnx。

回答

3

MySQL變量的範圍在連接中(最低級別,位於libmysql < - > mysqld之間)。這意味着,如果PHP本身或某個應用程序庫使用任何類型的mysql連接池,那麼您可以觀察到此變量消失(由於不可見的連接切換),並且該變量在斷開連接後肯定會消失。

如果你不快樂重寫你的查詢,你很可能在飛行中選擇apropriate TZ名字 - 比方說,形成一個用戶表,只要你有登錄用戶的ID,像這樣:

SELECT convert_tz(..., ..., (select user_tz from users where user_id = ...)) 
+0

我目前使用Convert_tz函數。並且不需要爲每個查詢選擇時區,我將它存儲在用戶會話中。 – olix20