索引key默认名称大小写是哪里控制的?6.1和6.5的默认不一样

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:】
请教一下,这个是有参数控制的吗?binlog同步源库语句没有带索引名,

6.1 不带索引名创建表的时候,索引名默认小写

create table t1 (Id int ,key (ID));

show create tabe结果:

CREATE TABLE t1 (

Id int(11) DEFAULT NULL,

KEY id (Id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

6.5 是和key后面输入列名同样的大小写。

create table t5 (Id int ,key (ID));

show create tabe结果:

CREATE TABLE t5 (

Id int(11) DEFAULT NULL,

KEY ID (Id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

导致结果:索引大小写不一致,syncdiff比对会报表结构不一致

上下游数据库的表可能会出现 schema 不同,例如下游表只拥有一部分上游的索引。不恰当的索引的选择会造成一方数据库耗时加大。在做表结构校验时,只保留上下游都有的索引(若不存在这种索引,则保留所有索引)。另一方面,某些索引包含的列并不是 unique 属性的,可能会有大量的行拥有相同的索引值,这样 chunk 会划分的不均匀。Sync-diff-inspector 在选择索引时,会优先选择 primary key 或者 unique 的索引,其次是选择重复率最低的索引。

:upside_down_face: :upside_down_face: :upside_down_face:

测试了下,还真是这样,但是tidb默认不是大小写不敏感吗?sync-diff-inspector 比对居然是大小写敏感的?


官方建议有需要忽略大小写需求的话,在初始化集群的时候就启用该参数,已经初始化的集群,无法通过更改该配置项打开或关闭新的 collation 框架,但是我实际测试过程中发现直接变更【mysql.tidb】表的new_collation_enabled参数是能关闭或者开启的,而且也能符合预期。
链接:技术分享 | tidb变更大小写敏感问题的总结 - 简书

不加··,默认小写,不知道为啥索引突然改了。开始还以为binlog同步的问题。后面看了ddl历史,没问题。测了下语句发现两个版本结果不一样。

不能忽略,忽略了生产不就炸锅了。是索引名不一样,不是数据有问题。

这个影响不大吧,我们最近也计划升级到6.5

不影响使用,就是影响感官

sync-diff-inspector 区分大小写吧

区分大小写的

区分大小写的

索引名称大小写没有参数控制,表名和数据库名是大小写敏感的(lower_case_table_names),而索引名称没有。

1 个赞

应该是代码哪里做的变动,没有找到地方,算了,没有大影响

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。