2012-11-02 118 views
2

我有兩個字段:time_scan_starttime_scan_end(時間戳字段)。MySQL時區查詢

當我用PDO打開與MySQL的連接時,我使用了SET NAMES utf8,time_zone = "+0:00";

現在,當我在MySQL中進行查詢時,是否必須使用UTC時間WHERE time_scan_start >= UTC或者我需要使用PHP本地區域? MySQL會自己做出這種決定嗎?

我做了一些測試gmdate和日期,有時它的工作,其他它不。

感謝

+1

標準的mysql時間字符串沒有TZ數據,所以'time_scan_start> ='2012-11-02 03:04:05'將假設時區全部匹配,只是直接比較這些值。 tz的東西只有在你進行包含tz值的轉換/格式時纔會進入遊戲。 –

+0

@MarcB好的,謝謝!所以,無論我放在WHERE中,它都會搜索假設WHERE日期正確並假設爲UTC(如果MySQL設置爲UTC +00:00)? –

回答

2

如果要針對TIMESTAMP領域相比,你需要在服務器的時區使用比較值。您可以確定通過服務器時區:

SELECT @@time_zone; 

因此,如果您已經執行

SET NAMES time_zone = "+0:00"; 

,那麼你將使用基於UTC值。

這是因爲TIMESTAMP字段以UTC格式存儲在MySQL中,並在顯示(或比較)之前轉換爲服務器的時區。

注意:如果您要與DATETIME字段或TIME字段進行比較,則需要在與插入該字段時所使用的時區相同的時區中使用比較值。

這是因爲DATETIMETIME字段存儲在沒有任何時區信息的MySQL中,並且在顯示(或比較)之前不轉換。

2

MySQL DATETIME對時區一無所知。因此,您需要決定哪個時區將是您的「默認」(通常是UTC),並存儲使用該時區的所有時間戳,必要時使用CONVERT_TZ

然後,對搜索執行相同的操作,即將值轉換爲UTC,然後在搜索中使用它們。