【问题标题】:MySQL 5.7.26 weird issue... cannot set datetime to: 2020-03-21 00:00:00MySQL 5.7.26 奇怪问题...无法将日期时间设置为:2020-03-21 00:00:00
【发布时间】:2019-09-25 00:56:51
【问题描述】:

我无法在我的表格中插入这个日期:2020-03-21

我的意思是我可以设置 20 和 22 就好了,但是当我设置 21 时它会失败并出现错误:

日期时间值不正确:'2020-03-21 00:00:00'

使用 PDO 我得到:

PDOException::("SQLSTATE[22007]: 无效的日期时间格式:1292 不正确的日期时间值:'2020-03-21 00:00:00' 第 1 行的列 'when'")

我真的很困惑,所以非常感谢任何帮助!

服务器版本:5.7.26 - MySQL 社区服务器 (GPL)

协议版本:10

表:

CREATE TABLE `test` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `when` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;

查询:

这很好用:

INSERT INTO `test` (`when`) VALUES ('2020-03-20 00:00:00');

这会返回错误:

INSERT INTO `test` (`when`) VALUES ('2020-03-21 00:00:00');

不正确的日期时间值:“2020-03-21 00:00:00”对于第 1 行的列“时间”

使用 phpMyAdmin 时出现同样的错误

【问题讨论】:

  • 显示您正在运行的确切查询。还有一个表模式。
  • @zerkms 不知道为什么我被否决了,它与表和查询无关......无论如何添加了一个简单的示例表。
  • 您的服务器时区是什么?你很可能有某种夏令时开始,也许这个特定的时间在你的时区根本不存在
  • @MadhurBhaiya 你是 100% 正确的!感谢您帮助我理解这一点。
  • 欢迎。您可以用您的时区作为答案.. 将来会帮助其他人

标签: mysql


【解决方案1】:

@MadhurBhaiya 将此作为评论回答,

问题是“夏令时”,基本上我的服务器时区不存在那个时间。

通过将时区更改为 UTC(没有夏令时)来修复它

另外,请注意,此问题仅发生在 TIMESTAMP 字段(DATETIME 不会发生)

【讨论】:

  • 我不明白为什么特定时间不能存在,因为某些夏令时。有人可以解释一下这是怎么发生的吗?
  • @BhaumikBhatt 在特定日期,恰好在00:00:00daylight saving 的时间更改为01:00:00,因此该日期的时间范围00:00:00 - 00:59:59 不存在!某些时区没有夏令时,例如 UTC
  • “在特定日期,恰好在 00:00:00 时间更改为 01:00:00” @J.Doe 然后00:00:00 应该存在逻辑上... 00:00:00.00000100:59:59 不存在...如果 00:00:00 不可能,MySQL 时间戳数据类型会处理这个有点奇怪...
  • @RaymondNijland 好吧,我也很困惑,但我认为 00:00:00 被表示为 01:00:00。很高兴知道这个 MySQL 问题,尽管它可能会导致一些严重的问题......将始终坚持使用 UTC。我认为如果他们自动将这些时间转换为该日期的 00:30 到 01:30,而不是返回错误,或者至少为此设置会有所帮助,会更好。
  • 这太疯狂了,但你的回答对我有帮助!我的数据库不允许我使用'2020-03-29 02:00:00'(服务器上配置了 CEST 时区),MySQL 8.0
猜你喜欢
  • 2021-05-03
  • 1970-01-01
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
  • 2013-07-23
  • 1970-01-01
  • 1970-01-01
  • 2013-07-12
相关资源
最近更新 更多