【问题标题】:Daylight Saving Issue夏令时问题
【发布时间】:2017-03-14 08:19:04
【问题描述】:

我正在使用带有 EDT 时区的 MySQL。时移期间(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 将上述查询视为说明 select resId,resTimeStamp from RESUME 其中 resTimeStamp >='2016-03-13 1:59:00' 仅忽略 && resTimeStamp 是否可以调整 mysql 以将 2016-03-13 02:00:00 考虑为 2016-03-13 02:59:59 作为 2016-03-13 03:00:00

【问题讨论】:

  • 时间2016-03-13 02:00不存在,因为时钟立即从1:59:59跳到03:00:00
  • 如果改成2016-03-13 03:00:00会怎样?
  • 那么它工作正常。是错误还是功能..?
  • 有什么办法可以让mysql把2016-03-13 02:00:00 to 2016-03-13 02:59:59当作2016-03-13 03:00:00。

标签: mysql datetime timezone dst datetimeoffset


【解决方案1】:

正如 cmets 中所述,这是因为 Daylight Saving Time。当你“提前”时,一个小时就会消失。

坦率地说,时区是一场噩梦,最好尽可能避免。一般来说,set your database time zone to use UTC 并将所有日期时间存储为UTC 是一个好主意。这样可以避免担心时区或夏令时之类的事情。您可以使用CONVERT_TZ 来处理转换,或者您的编程语言自己的时区转换函数。

【讨论】:

  • 是否可以在 mysql 中通过任何补丁或设置将 2016-03-13 02:00:00 更改为 2016-03-13 02:59:59 为 2016-03-13 03:00 :00 为所有年份。我相信我的问题会得到解决。
  • @GauravSaini 当然,你可以修补 MySQL ......理论上。然后跨 MySQL 版本维护该补丁。我认为你以错误的方式绕过它。让我们备份。这些无效日期从何而来?为什么将日期存储在当地时区?
猜你喜欢
  • 2013-11-15
  • 2015-06-07
  • 2011-11-20
  • 2011-11-20
  • 2013-02-19
  • 2013-01-30
  • 2010-10-12
  • 2013-08-28
  • 2014-08-22
相关资源
最近更新 更多