MySQL中的'2018-03-22 00:00:00'有什么问题?

时间:2018-07-22 10:24:15

标签: mysql date datetime timezone dst

我想更新日期字段并将其设置为2018-03-22 00:00:00,但出现以下愚蠢错误:

  

错误代码:1292。错误的日期时间值:第158917行的“日期”列为“ 2018-03-22 00:00:00”

这是我用于更新的查询:

update assets.transactions 
set date = date_add(date, interval 1 hour)
where date between '2018-03-21 23:00:00' and '2018-06-29 23:59:59';

怎么了?我进行了大量搜索,发现MySQL不支持1970-01-01 00:00:01之前的日期,这是可以接受的,但是日期是2018年中?这是我无法消化的。

有什么解决方案可以使这项工作正常进行吗?

1 个答案:

答案 0 :(得分:4)

我想您正在更新TIMESTAMP列。我还猜想您已将您的MySQL实例设置为带有夏令时切换的时区,时间为2018年3月23日。我猜您所在国家/地区的时区切换规则意味着时钟将从2018年3月21日11:59:59滚动到2018年3月22日01:00:00。

因此,值2018-03-22 00:00:00不存在。

奇怪,不是吗?

尝试发出此MySQL命令,以将时区设置为UTC,然后再进行这些大量的时间戳更新。

SET time_zone = 'UTC';

别忘了在执行其他操作之前将其切换回去。或者只是通过其他MySQL连接进行这些操作。