2016-11-01 91 views
1

我正在使用MySQL和EDT時區。時間平移(2016年3月3日,02:00)。我可以看到這個奇怪的行爲,其中mysql忽略了我的2ed條件(下面用粗體顯示)。有沒有辦法解決這個問題..?夏令時問題

mysql> explain select resId,resTimeStamp from RESUME 
     where resTimeStamp >='2016-03-13 1:58:00' && resTimeStamp < '2016-03-13 1:59:00' 

行解析= 9

mysql> explain select resId,resTimeStamp from RESUME 
     where resTimeStamp >='2016-03-13 1:59:00' && resTimeStamp < '2016-03-13 02:00:00'; 

行解析= 2436217

MySQL的治療上述查詢從RESUME 其中resTimeStamp> ='解釋選擇渣油,resTimeStamp 2016- 03-13 1:59:00'只忽略& & resTimeStamp <'2016-03-13 02:00:00'; 是否可以調整mysql來考慮2016-03-13 02:00:00至2016-03-13 02:59:59 as 2016-03-13 03:00:00

+0

時間'2016-03-13 02:00'不存在,因爲時鐘從'1:59:59'立即跳轉到'03:00:00'。 – Barmar

+0

如果將其更改爲「2016-03-13 03:00:00」,會發生什麼情況? – Barmar

+0

然後它工作正常。這是一個錯誤還是一個功能? –

回答

0

正如在評論,這是因爲Daylight Saving Time。當你「前進」一小時後就會失蹤。

坦率地說,時區是儘可能避免的噩夢。一般來說,set your database time zone to use UTC是一個好主意,並將所有日期時間存儲爲UTC。這可以避免擔心時區或夏令時等事情。您可以使用CONVERT_TZ來處理轉換或編程語言自己的時區轉換功能。

+0

是否可以在mysql中通過任何補丁或設置更改2016-03-13 02:00:00至2016-03-13 02:59:59爲2016-03-13 03:00:00爲所有年份。 我相信那麼我的問題將得到解決。 –

+0

@GauravSaini當然,你可以修補MySQL ...理論上。然後在MySQL版本中維護該修補程序。我想你會以錯誤的方式繞過它。讓我們回去吧。這些無效日期從哪裏來?你爲什麼要在當地時區儲存你的日期? – Schwern