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

Posted

技术标签:

【中文标题】MySQL 中的“2018-03-22 00:00:00”有啥问题?【英文标题】:What's wrong with '2018-03-22 00:00:00" in MySQL?MySQL 中的“2018-03-22 00:00:00”有什么问题? 【发布时间】:2018-12-30 00:58:47 【问题描述】:

我想更新一个日期字段并将其设置为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 年中的日期?这是我无法消化的东西。

是否有任何解决方案可以使这项工作正常进行?

【问题讨论】:

那个日期列是什么类型的? @fvu 该列定义为 TIMESTAMP 请包含完整的查询。顺便问一下,你真的在​​使用 MySQL 吗? @TimBiegeleisen 是的,伙计,我为什么要对那个 xD 撒谎,我更新了问题并添加了查询。 @NiVeR 是的,显然它可以在小提琴中使用,但在我的机器上却不行。我的情况和你的不同之处在于我的机器的时区是+3:30。 【参考方案1】:

我猜您正在更新 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 连接执行这些操作。

【讨论】:

终于,有人想出了一些有意义的东西。感谢您的回答。我会检查它并让你更新。 恕我直言,@MahdiTahsildari,对那些试图在 cmets 中帮助你的人放轻松。这种事情很少发生。 哦,我不是故意的。我感谢每个人,无论他们的解决方案是否有效,他们都很乐意提供帮助。如果英语不是我的第二语言,我想我听起来不会冒犯。在我的语言中,这样的句子是一种恭维。上课了。

以上是关于MySQL 中的“2018-03-22 00:00:00”有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

java中的简单mysql选择比MySQL Workbench中的慢

MySQL:啥时候真正需要 MySQL 中的 Flush Privileges?

16-mysql基础-mysql中的存储过程

16-mysql基础-mysql中的存储过程

mySQL在java中的应用

尝试将日期作为python中的输入并使用mysql连接器更新mysql表中的值