Я хочу точно сопоставить результаты фильтра, используя 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);
Я вставил 1 миллион строк, также содержащих строки ниже.
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';
Почему я получаю результаты, которые ТАКЖЕ имеют букву ü (например, üsasdasd или anfüs), когда я фильтрую как "LIKE 'us%'"
или " = 'anfus'"
ИЛИ Почему я получаю результаты, которые также имеют букву u (например,usasdasd или anfus), когда я фильтрую как "LIKE 'üs%'"
или " = 'anfüs'"
?
Как получить результаты, содержащие ТОЛЬКО букву ü (например, üsasdasd или anfüs), когда я фильтрую как "LIKE 'üs%'"
или " = 'anfüs'"
Viceнаоборот?
ANSWER:
Я не знаю почему, но COLLATE = utf8mb4_0900_as_cs устранил проблему.