大小写敏感的设置问题

【 TiDB 使用环境】生产环境
【 TiDB 版本】6.5.3
【遇到的问题:问题现象及影响】
业务那边要求大小写需要敏感,即区分大小写!
请问各位大佬,TiDB的SQL查询是否有大小写敏感设置?比如select * from a1和select * from A1有区别不?有没有相关参数开启或关闭这个敏感或不敏感?还是跟字符集有关系?

image

1 个赞

描述错了,是字段值,比如:
mysql> select * from t where name = ‘A’;
±—±-----±----+
| id | name | age |
±—±-----±----+
| 1 | a | 10 |
| 2 | A | 11 |
±—±-----±----+
2 rows in set (0.01 sec)
mysql> select * from t where name = ‘a’;
±—±-----±----+
| id | name | age |
±—±-----±----+
| 1 | a | 10 |
| 2 | A | 11 |
±—±-----±----+
2 rows in set (0.02 sec)
要变成以下结果:
mysql> select * from t where name = ‘a’;
±—±-----±----+
| id | name | age |
±—±-----±----+
| 1 | a | 10 |
±—±-----±----+
1 row in set (0.00 sec)

mysql> select * from t where name = ‘A’;
±—±-----±----+
| id | name | age |
±—±-----±----+
| 2 | A | 11 |
±—±-----±----+
1 row in set (0.01 sec)

默认值是不区分,自己改一下

表的排序规则是啥

ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

和排序规则有关系
https://docs.pingcap.com/zh/tidb/v6.5/character-set-and-collation#新框架下的排序规则支持

2 个赞

和Mysql是由区别的吗?
collate(校对) 规则:
*_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的
*_cs: case sensitive collation,区分大小写
*_ci: case insensitive collation,不区分大小写

我理解的是,规则后缀应该是一致的,只是默认值不一样。

TiDB 默认使用二进制排序规则。这一点与 MySQL 不同,MySQL 默认使用不区分大小写的排序规则。

1 个赞

用默认的uft8mb4_bin排序区分大小写

刚刚测试了一下,貌似MySQL建表语句如果没有写排序规则,就默认不会区分字段值的大小写,TiDB默认是有排序规则的,默认区分大小写

配置开关 new_collations_enabled_on_first_bootstrap 可以控制台tidb集群是否区分区分大小写敏感,默认是区分大小写的,在集群初次初始化时决定是否启用新规则(兼容MySQL默认不区分大小写),如需启用新排序规则框架可将 new_collations_enabled_on_first_bootstrap 的值设为 true

TiDB想要在TiDB上实现兼容,需要重建集群处理了,这个参数只在集群首次初始化时可以配置。

是的,我们就遇到了,新建集群搞的。不过一般区分大小写是对的,就是应该严谨。 :yum:

1 个赞

嗯嗯,关键是有的列值确实有大小写区分 :joy:

表的排序规则是什么

前面回复过了

1 个赞

默认utf8_bin 大小写敏感

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