【发布时间】:2019-09-20 08:33:29
【问题描述】:
我想使用 CHARACTER SET utf8mb4 完全匹配过滤结果。
ALTER DATABASE test CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE TABLE users (
username VARCHAR(25) NOT NULL,
password VARCHAR(25) NULL NULL
)
ENGINE=innodb DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
CREATE INDEX users_username_idx ON users (username);
我插入了 100 万行也包含下面的行。
INSERT INTO users SELECT 'üsasdasd','somepassword';
INSERT INTO users SELECT 'usasdasd','somepassword';
INSERT INTO users SELECT 'pğasdasdasd','somepassword';
INSERT INTO users SELECT 'anfüs','somepassword';
INSERT INTO users SELECT 'anfus','somepassword';
然后应用了一些查询。
SELECT * FROM users WHERE username LIKE 'üs%';
SELECT * FROM users WHERE username LIKE 'us%';
SELECT * FROM users WHERE username LIKE 'pğ%';
SELECT * FROM users WHERE username = 'anfüs';
SELECT * FROM users WHERE username = 'anfus';
当我过滤为"LIKE 'us%'" 或" = 'anfus'" 时,为什么我得到的结果也有 ü 字母(如 üsasdasd 或 anfüs)
要么
当我过滤为"LIKE 'üs%'" 或" = 'anfüs'" 时,为什么我得到的结果也有你的字母(如usasdasd 或anfus)?
当我过滤为"LIKE 'üs%'" 或" = 'anfüs'" 反之亦然时,如何获得只有 ü 字母的结果(如 üsasdasd 或 anfüs)?
ANSWER:
我不知道为什么,但是 COLLATE=utf8mb4_0900_as_cs 解决了这个问题。
【问题讨论】:
-
您不使用 COLLATE=utf8mb4_0900_ai_ci 的任何原因?
-
不幸的是,这并不重要。
标签: mysql indexing sql-like cultureinfo utf8mb4