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

Mah*_*ari 4 mysql timezone datetime date 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';
Run Code Online (Sandbox Code Playgroud)

怎么了?我查了很多,发现1970-01-01 00:00:01MySQL不支持之前的日期,这是可以接受的,但是2018年中的日期?这是我无法消化的事情。

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

O. *_*nes 6

我猜你正在更新一个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';
Run Code Online (Sandbox Code Playgroud)

在进行其他操作之前不要忘记将其切换回来。或者只是从不同的 MySQL 连接执行这些操作。

  • 带着尊重,@MahdiTahsildari,请对那些试图在评论中帮助你的人宽容一点。这种事情很少发生。 (2认同)