为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【TiDB 版本】
v5.0.0
【问题描述】
建表语句如下
CREATE TABLE `abc` (
`id` INT ( 20 ) NOT NULL AUTO_INCREMENT COMMENT '自增长主键',
`create_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '修改时间',
`expire_time` datetime NOT NULL DEFAULT '2999-00-00 00:00:00' COMMENT '过期时间',
PRIMARY KEY ( `id` )
) DEFAULT CHARSET = utf8
结果会报错Error 1067: Invalid default value for ‘expire_time’。
查询相关帖子,发现应该是NO_ZERO_IN_DATE和NO_ZERO_DATE的限制问题
使用如下语句修改日期相关设置,去掉了以上2个限制
SET GLOBAL sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
==========================================
结果发现NO_ZERO_DATE生效了,我create_time的0000-00-00 00:00:00不报错。
但是NO_ZERO_IN_DATE似乎没生效,expire_time的2999-00-00 00:00:00依旧报错。
请问是bug吗,如何解决?
问题1是看哪个配置?
问题2 create table的关键字段就是上面代码贴的CREATE TABLE abc
哦
yilong
(yi888long)
4
show create table 的结果反馈下,多谢。
上游mysql真实表show create table如下:
CREATE TABLE `short_url` (
`id` int(20) NOT NULL AUTO_INCREMENT COMMENT '自增长主键',
`short_code` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '短链接编码',
`long_url` varchar(500) NOT NULL DEFAULT '' COMMENT '原始链接地址',
`create_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '修改时间',
`expire_time` datetime NOT NULL DEFAULT '2999-00-00 00:00:00' COMMENT '过期时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_index_short_code` (`short_code`)
) ENGINE=InnoDB AUTO_INCREMENT=1974805 DEFAULT CHARSET=utf8 COMMENT='短链接和原始链接对应表'
已确认是 bug。除了更改默认值以外,暂时没有解决办法,这个问题将在 5.0.2 修复。
相关 issue:https://github.com/pingcap/tidb/issues/24165
目前workaround是把上游相关表,全部都把月和日改成非0…
1 个赞
system
(system)
关闭
9
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。