Mysql
MySQL 不區分大小寫和區分重音的字元集/排序規則是什麼?
我正在尋找一個字元集/排序規則,當我做一個
SELECT * FROM table_name WHERE username = “Warrior”
它只返回使用者名 = “Warrior”、“warrior” 或 “WARRIOR” 的行,而不是 “WÂRRÎOR” “Wârrîor” 等。
我找到了一個部分解決方案,通過將 Charset 更改為“utf8mb4”並將排序規則更改為“utf8mb4_bin”,現在它似乎對重音敏感,它將“Wârrîor”與“Warrior”區分開來,但它也區分大小寫,所以“Warrior”是不同的而不是我想要的“戰士”。
我嘗試了不同的排序規則,但我無法讓一個完全按照我的意願去做。有任何想法嗎 ?
以下是“utf8mb4”字元集中可供我使用的不同排序規則的螢幕截圖:
請注意,這
_bin
意味著區分大小寫和重音,在您的情況下,您不應該使用 utf8mb4_bin。你可以使用:
utf8mb4_0900_as_ci
as
表示區分重音,ci
表示不區分大小寫展示:
CREATE TABLE t ( s1 VARCHAR(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci ); insert into t values ('WÂRRÎOR'), ('Warrior'), ('warrior'), ('WARRIOR'), ('Wârrîor'); SELECT * FROM t WHERE s1 = "Warrior";
結果:
s1 Warrior warrior WARRIOR
- _bin – 區分重音和區分大小寫
- _as_ci (僅限 MySQL 8.0) – 區分重音和不區分大小寫
- _ci – 不區分重音和不區分大小寫
這可以讓您看到什麼會比較相等,什麼不會:
- MySQL 到 5.7,加上帶有 utf8 或 utf8mb4 的 MariaDB – http://mysql.rjweb.org/utf8_collat ions.html
- MySQL 8.0 – utf8mb4 – http://mysql.rjweb.org/utf8mb4_collat ions.html
(警告:這些取自特定版本;可用的排序規則確實會改變,但排序規則不會改變。)
大多數,也許不是全部,_ci 和 _ai_ci 排序規則將處理 “Wârrîor” = “Warrior”
所有 _ci 或 _ai_ci 排序規則都將處理 “WARRIOR” = “Warrior”