插入合法时间戳时出现#1292 Incorrect datetime value错误
问题原因及解决方案
核心原因
你遇到的问题是夏令时(DST)切换导致的无效时间戳。2022年3月13日是北美地区夏令时启动日期,当地时间凌晨2点会直接跳转为3点,2022-03-13 02:21:55这个时间在对应时区规则里根本不存在,MySQL会判定为无效datetime值,因此抛出#1292 Incorrect datetime value错误。
验证方法
执行以下SQL查看当前会话时区,确认是否使用了夏令时时区:
SELECT @@session.time_zone;
若返回'America/New_York'这类启用夏令时的时区,即可确认原因。
解决方案
- 调整时间值:直接使用合法时间点,比如
2022-03-13 03:21:55(夏令时切换后)或2022-03-13 01:21:55(切换前),这也是你测试时改小时为1或3能成功的原因。 - 修改时区配置:如果业务不需要夏令时,可将MySQL时区改为无夏令时的时区(如UTC):
-- 临时修改当前会话时区 SET time_zone = 'UTC'; -- 永久修改全局时区(需重启MySQL生效) SET GLOBAL time_zone = 'UTC'; - 更换字段类型:若无需时区自动转换,可将字段类型从
timestamp改为datetime,datetime仅校验格式合法性,不会根据时区调整时间。
内容的提问来源于stack exchange,提问作者XtevensChannel
相关产品推荐
相关产品推荐

