【 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 的索引,其次是选择重复率最低的索引。
测试了下,还真是这样,但是tidb默认不是大小写不敏感吗?sync-diff-inspector 比对居然是大小写敏感的?
官方建议有需要忽略大小写需求的话,在初始化集群的时候就启用该参数,已经初始化的集群,无法通过更改该配置项打开或关闭新的 collation 框架,但是我实际测试过程中发现直接变更【mysql.tidb】表的new_collation_enabled参数是能关闭或者开启的,而且也能符合预期。
链接:技术分享 | tidb变更大小写敏感问题的总结 - 简书
不加··,默认小写,不知道为啥索引突然改了。开始还以为binlog同步的问题。后面看了ddl历史,没问题。测了下语句发现两个版本结果不一样。
不能忽略,忽略了生产不就炸锅了。是索引名不一样,不是数据有问题。
sync-diff-inspector 区分大小写吧
索引名称大小写没有参数控制,表名和数据库名是大小写敏感的(lower_case_table_names),而索引名称没有。
1 个赞
应该是代码哪里做的变动,没有找到地方,算了,没有大影响
system
(system)
关闭
15
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。