【TiDB 版本】v7.5.3
【遇到的问题:问题现象及影响】
表结构:
CREATE TABLE t1
(
pkid
int(20) NOT NULL AUTO_INCREMENT,
ts
timestamp(3) NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT ‘时间戳’,
ts2
timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT ‘时间戳’,
PRIMARY KEY (pkid
)
) ENGINE=InnoDB AUTO_INCREMENT=90004 DEFAULT CHARSET=utf8mb4;
DML:
set sql_mode=‘’;
insert into t1 values (null,null,null);
TiDB 返回结果:
MySQL 返回结果:
INSERT INTO t_timestamp(ts) VALUES (NULL);
这样插没问题,应该是
INSERT INTO t_timestamp VALUES (NULL,NULL,NULL);
这样插的时候,tidb把null直接转换成0000-00-00 00:00:00.000了
1 个赞
lllzd
(时光旅行者)
3
在Mysql中, 如果一个 NOT NULL TIMESTAMP
字段被插入 NULL
,并且该字段有 DEFAULT CURRENT_TIMESTAMP
,则会自动使用默认值填充。
有猫万事足
4
mysql 8.0.42版本。报错插不进去。
tidb 8.5.2版本,错误是一样的。
tidb 7.5.3我也测了下,确实和mysql8不一致。插入是成功的。
7.5.6就变得一致了。
这个兼容性问题,应该确实存在,不过后续应该是修复了。
2 个赞
是否插入进去这个问题,原因应该是这个:
explicit_defaults_for_timestamp 参数的默认值,MySQL 5.7 是 OFF,MySQL 8.0 是 ON
1 个赞
你发的这个sql是可以。
不过业务用了 orm,默认情况下字段是完整的,不传值的时候指定为 null
Kongdom
(Kongdom)
8
也就是TiDB在兼容8.0的时候,把这个参数也兼容了,这样理解是对的吧。
system
(system)
关闭
9
此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。