背景
一次数据同步中,引发的Incorrect datetime
复现
-- 建一张表
CREATE TABLE `test_timestamp` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
-- 学艺不精,以为这样能插进去
insert into srm.test_timestamp (id, create_time) value (1,'1641465451.142')
-- 正确写法
insert into srm.test_timestamp (id, create_time) value (1,from_unixtime('1641465451.142'))
错误写法发生是由于在一批数据同步当中,获取mysql binlog形式直接放进去,timestamp类型binlog 使用整数存放的
区别
占用空间
- timestamp 4 字节
- datetime 8 字节
范围
- timestamp :‘1970-01-01 00:00:01.000000’ to ‘2038-01-19 03:14:07.999999’
- datetime:1000-01-01 00:00:00.000000’ to ‘9999-12-31 23:59:59.999999’
binlog
- timestamp 整数类型
- datetime 日期时间类型