Mysql

MySQL 不區分大小寫和區分重音的字元集/排序規則是什麼?

  • June 22, 2022

我正在尋找一個字元集/排序規則,當我做一個

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 – 不區分重音和不區分大小寫

這可以讓您看到什麼會比較相等,什麼不會:

(警告:這些取自特定版本;可用的排序規則確實會改變,但排序規則不會改變。)

大多數,也許不是全部,_ci 和 _ai_ci 排序規則將處理 “Wârrîor” = “Warrior”

所有 _ci 或 _ai_ci 排序規則都將處理 “WARRIOR” = “Warrior”

引用自:https://dba.stackexchange.com/questions/313500