我們后端使用select * from table where name = xxx
來判斷取名是否重復(fù)。
這里有一個(gè)問題:
因?yàn)槭褂胢ysql 的utf8_genera_ci排序規(guī)則衍锚,這是一個(gè)不區(qū)分大小寫的規(guī)則揭厚,這里實(shí)際判斷會(huì)有誤差茉贡。
具體來說线罕,utf8_genera_ci不區(qū)分以下情況的字符串:
字母的大小寫:在比較字符串時(shí)坚芜,它會(huì)將大寫字母與相應(yīng)的小寫字母視為相等旅赢。例如宛蚓,"A" 和 "a" 在比較時(shí)被視為相等激捏。
帶重音符號(hào)的字符:它會(huì)將帶有重音符號(hào)(如 á、é凄吏、? 等)的字符與沒有重音符號(hào)(如 a缩幸、e壹置、i)的字符視為相等。例如表谊,"á" 和 "a" 在比較時(shí)被視為相等钞护。
字符編碼的差異:utf8mb4_general_ci 會(huì)忽略字符編碼差異,將它們視為相等爆办。例如难咕,不同的 Unicode 編碼序列表示同一字符時(shí),它們會(huì)被視為相等距辆。
舉個(gè)例子:
- AvA Rosa
- Avá Rosa
- Ava Rosa
都可以用=判斷為相等