處理時區
當你需要在 MySQL 中處理全球使用者群的時間資訊時,請在表中使用 TIMESTAMP 資料型別。
對於每個使用者,儲存使用者首選項時區列。VARCHAR(64)
是該列的良好資料型別。當使用者註冊使用你的系統時,請詢問時區值。我的是大西洋時間,America/Edmonton
。你的可能是也可能不是 Asia/Kolkata
或 Australia/NSW
。對於此使用者首選項設定的使用者介面,WordPress.org 軟體就是一個很好的例子。
最後,無論何時代表使用者建立從主機程式(Java,php 等)到 DBMS 的連線,都要發出 SQL 命令
SET SESSION time_zone='(whatever tz string the user gave you)'
在處理涉及時間的任何使用者資料之前。然後,你安裝的所有 TIMESTAMP
次將在使用者的本地時間呈現。
這將導致進入表的所有時間都轉換為 UTC,並且所有時間都將轉換為本地。它適用於 NOW()
和 CURDATE()。同樣,你必須使用 TIMESTAMP 而不是 DATETIME 或 DATE 資料型別。
確保你的伺服器作業系統和預設 MySQL 時區設定為 UTC。如果在開始將資訊載入到資料庫之前不這樣做,則幾乎不可能修復。如果你使用供應商執行 MySQL,堅持他們做對了。