大小写敏感问题

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】
从5.4.3dumpling导出数据迁移到7.5.1,通过lightning导入发现报错Duplicate entry,有数据重复。
表的排序是 COLLATE=utf8_general_c
i在5.4.3版本中是大小写敏感的,以下是旧表的数据截图


但是在7.5.1中就大小写不敏感插不进去了,请问这个是什么问题?

新 7.5.1 环境表校验规则是什么呢?

tidb从4.0开始支持collation规则但是默认是关闭的,对应的参数是new_collation_enabled。

我查了下老的是new_collation_enabled 默认是false,排序规则是utf8_general_ci,那排序规则就不起作用走默认大小写敏感,
新的集群是7.5.1版本默认new_collation_enabled 是true,排序规则是utf8_general_ci,排序规则起作用,那就是大小写不敏感。

我把开关关闭改成默认大小写敏感还是导入报错
update mysql.tidb set VARIABLE_VALUE = ‘False’ where VARIABLE_NAME = ‘new_collation_enabled’ limit 1;

这个好像初始化就生效了,后面怎么改都没用。只能重新初始化集群,或者暂停然后修改对应下游的表的排序规则再启动试试?

mark: 版本升级注意检查事项

这个是不是要和业务沟通下,实际网卡的MAC地址并没有小写字母吧。另外tidb lightning 重复值能否通过冲突数据检测配置解决。

那就只能重装数据库了

:thinking: 没看懂,是这个参数导致的吗,能给个测试例子吗

应该是字符集规则吧,排序规则也会有影响?

new_collations_enabled_on_first_bootstrap这个参数是在集群第一次初始化的时候设置的,老版本默认是false,就是默认大小写敏感不支持修改表的collation 排序
新版本new_collations_enabled_on_first_bootstrap是默认true,可以自己对表设置排序规则,也就是可以自己设置某张表是否大小写敏感,我这个表设置的是utf8_general_ci大小写不敏感。
我们这个数据乱才会有这种问题。

排序规则决定大小写是否敏感

可以这样,直接修改dumpling的备份内容,把有异常的字符集改成utf8_bin。
我DM同步mysql8的时候就是这么干的 :sunglasses:

那你把表都改为 _bin 排序规则就好了啊 :joy_cat:

迁移方面,字符集、排序参数很重要 :grin:

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