MySQL 8.0.32插入特定时间报错,疑似Bug?
问题分析与结论
这不是MySQL的Bug,而是夏令时切换导致的无效时间戳问题,属于预期行为。
核心原因
Europe/Berlin(CET)时区在2011年3月27日执行夏令时切换:当地时间凌晨2点整,时钟会向前拨1小时,直接跳至3点。这意味着2011-03-27 02:17:04这个时间点在该时区下根本不存在,属于无效的本地时间。
验证逻辑
- 插入
2011-03-28 02:17:04成功:该时间是夏令时切换后的有效时间(此时已进入CEST时区,时间正常存在)。 - 插入
2011-03-27 02:17:04失败:MySQL会根据会话时区(此处为SYSTEM,即Europe/Berlin)验证时间有效性,对于不存在的时间点,无论SQL模式如何设置,都会触发1292错误——这不是格式错误,而是时间本身在当前时区无对应UTC时间。
解决方案建议
如果需要规避这类问题,可参考两种方式:
- 改用
UTC_TIMESTAMP()存储UTC时间,彻底避免时区切换带来的无效时间问题; - 将MySQL全局/会话时区设置为UTC(如执行
SET GLOBAL time_zone = '+00:00';),统一以UTC标准处理时间数据。
内容的提问来源于stack exchange,提问作者merlin
相关产品推荐
相关产品推荐

