【TiDB 使用环境】测试环境
【TiDB 版本】8.5.3
【部署方式】本地部署
【操作系统/CPU 架构/芯片详情】x86
【机器部署详情】
【集群数据量】
【集群节点数】
【问题复现路径】
【遇到的问题:问题现象及影响】
TiDB对表字段的大小写敏感,部署时已经启用new_collations_enabled_on_first_bootstrap=true,
还要做什么配置才能对大小写不敏感?
【资源配置】
【复制黏贴 ERROR 报错的日志】
【其他附件:截图/日志/监控】
随缘天空
(Ti D Ber Ivw R7o Pj)
5
新建数据库时,不要使用默认的排序规则,使用如下规则:
排序规则的名称后缀决定了其比较行为:
_bin :二进制排序,区分 大小写(例如 utf8mb4_bin )。
_ci :不区分 大小写(Case Insensitive)。
_cs :区分大小写(Case Sensitive)。
– 修改现有表的默认排序规则
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
– 或者在创建新表时指定
CREATE TABLE new_table (
id INT PRIMARY KEY,
name VARCHAR(50)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
数据库级别的
ALTER DATABASE your_db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Kongdom
(Kongdom)
12
不要随便改大小写的排序规则,不同排序规则字段关联或比较时,不走索引。
Kongdom
(Kongdom)
14
印象中SQLMODE设置里没有吧,是哪个配置参数?
new_collations_enabled_on_first_bootstrap
全局参数配置
[server]
设置标识符大小写不敏感(核心参数)
lower-case-table-names = 1
确认新排序规则已启用(你已配置,再次确认)
new-collations-enabled-on-first-bootstrap = true
可选:若需要字符串内容也大小写不敏感,可配置字符集排序规则
[mysql]
设置默认字符集和排序规则(utf8mb4 推荐)
default-charset = “utf8mb4”
default-collation = “utf8mb4_general_ci”
乾坤大挪移
(Ti D Ber A8r Uup Mr)
20
设置服务器默认 collation(TiDB + PD)
[server]
character-set-server = “utf8mb4”
collation-server = “utf8mb4_general_ci”
或者更现代一点:
collation-server = “utf8mb4_0900_ai_ci”
ci = case insensitive
ai = accent insensitive(不区分重音)
需要重启 TiDB 生效
已存在的表不会自动改变(非常重要)
如果表已经存在,你必须:
ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
否则:
新建表
不敏感
老表
还是原来的规则
四、如果你想的是“表名也不区分大小写”
那要注意一句 非常狠的现实:
TiDB 不能在已初始化集群中修改 lower_case_table_names
正确姿势只有一个:
lower_case_table_names = 1
必须在第一次 bootstrap 前设置
已有数据 → 只能重建集群