我有兩個字段:time_scan_start
和time_scan_end
(時間戳字段)。MySQL時區查詢
當我用PDO打開與MySQL的連接時,我使用了SET NAMES utf8,time_zone = "+0:00";
。
現在,當我在MySQL中進行查詢時,是否必須使用UTC時間WHERE time_scan_start >= UTC
或者我需要使用PHP本地區域? MySQL會自己做出這種決定嗎?
我做了一些測試gmdate和日期,有時它的工作,其他它不。
感謝
我有兩個字段:time_scan_start
和time_scan_end
(時間戳字段)。MySQL時區查詢
當我用PDO打開與MySQL的連接時,我使用了SET NAMES utf8,time_zone = "+0:00";
。
現在,當我在MySQL中進行查詢時,是否必須使用UTC時間WHERE time_scan_start >= UTC
或者我需要使用PHP本地區域? MySQL會自己做出這種決定嗎?
我做了一些測試gmdate和日期,有時它的工作,其他它不。
感謝
如果要針對TIMESTAMP
領域相比,你需要在服務器的時區使用比較值。您可以確定通過服務器時區:
SELECT @@time_zone;
因此,如果您已經執行
SET NAMES time_zone = "+0:00";
,那麼你將使用基於UTC值。
這是因爲TIMESTAMP
字段以UTC格式存儲在MySQL中,並在顯示(或比較)之前轉換爲服務器的時區。
注意:如果您要與DATETIME
字段或TIME
字段進行比較,則需要在與插入該字段時所使用的時區相同的時區中使用比較值。
這是因爲DATETIME
和TIME
字段存儲在沒有任何時區信息的MySQL中,並且在顯示(或比較)之前不轉換。
MySQL DATETIME
對時區一無所知。因此,您需要決定哪個時區將是您的「默認」(通常是UTC),並存儲使用該時區的所有時間戳,必要時使用CONVERT_TZ
。
然後,對搜索執行相同的操作,即將值轉換爲UTC,然後在搜索中使用它們。
標準的mysql時間字符串沒有TZ數據,所以'time_scan_start> ='2012-11-02 03:04:05'將假設時區全部匹配,只是直接比較這些值。 tz的東西只有在你進行包含tz值的轉換/格式時纔會進入遊戲。 –
@MarcB好的,謝謝!所以,無論我放在WHERE中,它都會搜索假設WHERE日期正確並假設爲UTC(如果MySQL設置爲UTC +00:00)? –