MariaDB重音敏感但大小写不敏感的排序规则配置问题
解决方案:实现MariaDB重音敏感但大小写不敏感的唯一约束
针对你的MariaDB 10.6.18版本需求,核心是选对符合要求的排序规则——你需要的是大小写不敏感、重音敏感的规则,以下是具体操作:
为什么之前的尝试失败?
utf8mb4_unicode_ci:属于重音不敏感规则,会把é和e视为相同字符,所以Berlín和Berlin会被判定为重复。utf8mb4_0900_as_ci:这是MySQL的排序规则命名,MariaDB不兼容该名称,对应MariaDB 10.6的同逻辑规则是utf8mb4_uca900_as_ci(基于UCA 9.0.0排序标准)。
正确操作步骤
1. 选择适配的排序规则
MariaDB 10.6支持两种符合你需求的排序规则,任选其一即可:
utf8mb4_unicode_520_as_ci:基于Unicode 5.2.0标准,满足大小写不敏感、重音敏感要求。utf8mb4_uca900_as_ci:基于UCA 9.0.0标准,同样实现大小写不敏感、重音敏感逻辑。
2. 修改表字段及索引
先备份表数据(避免操作失误),然后执行以下SQL修改PUBLISHER_NAME字段的排序规则(唯一索引会自动继承字段的排序规则):
ALTER TABLE dim_publishers MODIFY COLUMN PUBLISHER_NAME varchar(255) NOT NULL COLLATE utf8mb4_unicode_520_as_ci;
或者使用UCA 9.0.0版本的规则:
ALTER TABLE dim_publishers MODIFY COLUMN PUBLISHER_NAME varchar(255) NOT NULL COLLATE utf8mb4_uca900_as_ci;
3. 验证效果
执行你提供的插入语句,会得到预期结果:
INSERT INTO dim_publishers (PUBLISHER_NAME) VALUES ('Berlin');→ 成功插入INSERT INTO dim_publishers (PUBLISHER_NAME) VALUES ('BERLIN');→ 报错(重复值,大小写不敏感判定)INSERT INTO dim_publishers (PUBLISHER_NAME) VALUES ('Berlín');→ 成功插入(重音敏感,视为新值)INSERT INTO dim_publishers (PUBLISHER_NAME) VALUES ('BERlín');→ 报错(重复值,是Berlín的大小写变体)
内容的提问来源于stack exchange,提问作者Foxfire And Burns And Burns
相关产品推荐
相关产品推荐

