MySQL TIMESTAMP类型最小可插入值及插入报错问题咨询
MySQL TIMESTAMP插入最小值报错的原因及解决方案
报错核心原因:时区转换导致值越界
MySQL的TIMESTAMP类型会自动将本地时区的时间转换为UTC存储,查询时再转回本地时区。文档中标注的TIMESTAMP范围是UTC时间的1970-01-01 00:00:01到2038-01-19 03:14:07,但如果你插入的是本地时区的1970-01-01 00:00:01,当本地时区比UTC早(比如东八区UTC+8),转换后的UTC时间会是1969-12-31 16:00:01——这个值低于TIMESTAMP的UTC最小值,因此触发#1292 - Incorrect datetime value错误。
可正常插入的最小本地时间计算方法
最小可插入的本地时间需要满足:转换为UTC后等于TIMESTAMP的UTC最小值1970-01-01 00:00:01。计算公式为:
最小本地时间 = UTC最小值 + 本地时区与UTC的偏移量
举两个实际例子:
- 若服务器时区为东八区(UTC+8),最小可插入的本地时间为
1970-01-01 08:00:01 - 若服务器时区为西五区(UTC-5),最小可插入的本地时间为
1969-12-31 19:00:01
你可以通过以下SQL命令查看当前数据库的时区配置:
SELECT @@time_zone, @@system_time_zone;
直接插入UTC最小值的解决方案
如果需要插入UTC标准的1970-01-01 00:00:01,可以临时将会话时区设置为UTC后再执行插入:
SET time_zone = '+00:00'; INSERT INTO your_table (order_date) VALUES ('1970-01-01 00:00:01');
内容的提问来源于stack exchange,提问作者Sachin
相关产品推荐
相关产品推荐

