在 MySQL 中,⺍ 和 ⺌ 被识别为相同字符,通常与字符集和排序规则(Collation) 的处理方式有关。以下是具体原因:
1. 字符的 Unicode 特性
⺍ 和 ⺌ 均为 Unicode 中的汉字部首:
⺍ 的 Unicode 编码是 U+2E8D
⺌ 的 Unicode 编码是 U+2E8C
它们在视觉上非常相似(仅细微差别),在某些语言或字符集中可能被视为 “等价” 字符。
2. MySQL 排序规则的影响
MySQL 的排序规则(如 utf8mb4_general_ci、utf8mb4_unicode_ci 等)决定了字符的比较方式:
_ci 后缀(Case Insensitive)表示不区分大小写,同时可能对视觉相似或语义相关的字符进行 “合并” 处理。
部分排序规则(尤其是早期的通用规则)会将 Unicode 中相似的字符视为等价,目的是优化多语言场景下的匹配(例如某些欧洲语言中的重音字符会被视为与基础字符相同)。
⺍ 和 ⺌ 可能因这种 “等价性规则” 被排序规则判定为相同字符。
3. 验证与解决方式
(1)验证字符是否被视为相同
可通过查询测试:
sql
SELECT '⺍' = '⺌' COLLATE utf8mb4_general_ci; -- 可能返回 1(相同)
SELECT '⺍' = '⺌' COLLATE utf8mb4_bin; -- 返回 0(不同,二进制比较)
(2)强制区分的解决方法
若需严格区分这两个字符,可使用二进制排序规则(_bin),它会直接比较字符的二进制编码(Unicode 码值),不做等价合并:
创建表时指定:
总结
⺍ 和 ⺌ 在 MySQL 中被视为相同,是因为所使用的排序规则(如 utf8mb4_general_ci)对相似字符做了等价处理。若需严格区分,使用二进制排序规则(utf8mb4_bin)即可。