2016-11-01 92 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