我们后端使用select * from table where name = xxx
来判断取名是否重复。
这里有一个问题:
因为使用mysql 的utf8_genera_ci排序规则,这是一个不区分大小写的规则,这里实际判断会有误差。
具体来说,utf8_genera_ci不区分以下情况的字符串:
-
字母的大小写:在比较字符串时,它会将大写字母与相应的小写字母视为相等。例如,"A" 和 "a" 在比较时被视为相等。
-
带重音符号的字符:它会将带有重音符号(如 á、é、ï 等)的字符与没有重音符号(如 a、e、i)的字符视为相等。例如,"á" 和 "a" 在比较时被视为相等。
-
字符编码的差异:utf8mb4_general_ci 会忽略字符编码差异,将它们视为相等。例如,不同的 Unicode 编码序列表示同一字符时,它们会被视为相等。
举个例子:
- AvA Rosa
- Avá Rosa
- Ava Rosa
都可以用=判断为相等
网友评论