【 TiDB 使用环境】生产
【 TiDB 版本】5.0
【遇到的问题】mysql是不区分大小写的,但TiDB是区分大小写的
【复现】用DM抽数到tidb 由于TIDB不可以区分大小写 ,所以有些数据查不出来。
区分大小写是由排序规则来定的。
show create table 看下你的表的collation是否一致,不一致指定不行的啊
1.首先看下tidb的new_collations_enabled_on_first_bootstrap是否为true的方式
2.如果1位true则看下上下游表结构是否一致,即排序规则是否一致,不一致就会这样
3.如果不一致的话要看下同步方式,如果上游表结构或者说建表语句只制定了字符集,比如utf8mb4,那么mysql5.7的对应默认排序规则是_general_ci,而tidb是_bin,所以才会一个区分,一个不区分
回答您第一个问题,new_collations_enabled_on_first_bootstrap=false 我看官网把这个值修改成true需要从新建集群,那样成本太大了。有没有其他的方式,或者说是局部生效的方式。
没有局部生效的方式,如果查询允许改的话倒是有办法解决,不然确实解决不了
您所指的查询容许改是什么意思?
比如说select upper(“abc”)="ABC"的写法,但是这种就会不走索引,其实最好的办法还是开启新排序规则,确实需要重新部署,这个需要衡量了
建议以后数据库做好规划,把mysql的校验规则设置为utf8_bin或者utf8mb4_bin 就可以避免这些问题了,让数据库的校验规则保持一致,以后就方便迁移数据库了
该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。