大小写敏感如何配置?

【TiDB 使用环境】测试环境
【TiDB 版本】8.5.3
【部署方式】本地部署
【操作系统/CPU 架构/芯片详情】x86
【机器部署详情】
【集群数据量】
【集群节点数】
【问题复现路径】

【遇到的问题:问题现象及影响】
TiDB对表字段的大小写敏感,部署时已经启用new_collations_enabled_on_first_bootstrap=true,
还要做什么配置才能对大小写不敏感?

【资源配置】
【复制黏贴 ERROR 报错的日志】
【其他附件:截图/日志/监控】

还有就是设置字符集合排序规则会控制大小写是否敏感

1 个赞

可以通过表和字段的排序规则来控制

新建数据库时,不要使用默认的排序规则,使用如下规则:

这受字符集控制,你看下表或字段字符集是什么

应该是需要alter table修改才能生效。

和mysql一样,受字符集和校验规则控制

  • 核心配置是将 TiDB 的 lower_case_table_names 设置为 1(永久配置需修改 tidb.toml 并重启集群),这是实现表 / 字段名大小写不敏感的关键。
  • 若需字段值的大小写不敏感,需为字段指定 utf8mb4_general_ci 等不区分大小写的排序规则。

排序规则的名称后缀决定了其比较行为:

  • _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;

:joy:不要随便改大小写的排序规则,不同排序规则字段关联或比较时,不走索引。

SQLMODE设置可以考虑设置一下吧

印象中SQLMODE设置里没有吧,是哪个配置参数?

new_collations_enabled_on_first_bootstrap

我是问sql_mode里哪个配置参数

全局参数配置
[server]
设置标识符大小写不敏感(核心参数)
lower-case-table-names = 1

确认新排序规则已启用(你已配置,再次确认)
new-collations-enabled-on-first-bootstrap = true

可选:若需要字符串内容也大小写不敏感,可配置字符集排序规则
[mysql]
设置默认字符集和排序规则(utf8mb4 推荐)
default-charset = “utf8mb4”
default-collation = “utf8mb4_general_ci”

这个只能在初始化集群的时候使用

:one: 设置服务器默认 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(不区分重音)

:pushpin: 需要重启 TiDB 生效

:two: 已存在的表不会自动改变(非常重要)

如果表已经存在,你必须:

ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;

否则:

新建表 :heavy_check_mark: 不敏感

老表 :x: 还是原来的规则

四、如果你想的是“表名也不区分大小写”

那要注意一句 非常狠的现实:

:rotating_light: TiDB 不能在已初始化集群中修改 lower_case_table_names

正确姿势只有一个:
lower_case_table_names = 1

:pushpin: 必须在第一次 bootstrap 前设置
:pushpin: 已有数据 → 只能重建集群

没用过

怎么看