MySQL 时间字段隐式转换造成时间被设置为“0000-00-00 00:00:00”

31 阅读1分钟

问题背景

由于业务需要,需要将数据同步到另一张表,技术方案选择使用修改表时间字段,监听对应binlog,从而实现数据同步,对应修改语句类似如下:

update tb_test set create_time = create_time+1 where create_time >='2025-10-01 00:00:00';

结果发现部分数据报错,且对应时间字段被设置为"0000-00-00 00:00:00"

问题原因

直接对mysql时间字段进行加法运算时,MySQL会进行隐式转换,将时间字段转换为时间戳,由于时间戳32位限制,该种情况下,如超出最大值,则MySQL会将时间字段设置为"0000-00-00 00:00:00"

解决方案

修改sql语句改为

update tb_test set create_time = DATE_ADD(create_time,INTERVAL 1 SECOND) where create_time >='2025-10-01 00:00:00';