Как реализовать поиск по частичному совпадению (LIKE) с поддержкой кириллицы в базе данных с кодировкой UTF8MB4?
Для корректной работы поиска по частичному совпадению (LIKE) с кириллицей в базе данных с кодировкой UTF8MB4 необходимо правильно настроить кодировку и коллацию (collation) на нескольких уровнях: сервер, база данных, таблица и столбец.
**1. Выбор правильной коллации**
Ключевой момент — использование коллации, которая корректно сравнивает кириллические символы. Рекомендуемые варианты:
— `utf8mb4_unicode_ci` — регистронезависимое сравнение, хорошо работает с кириллицей.
— `utf8mb4_general_ci` — более быстрая, но менее точная альтернатива.
— `utf8mb4_0900_ai_ci` — актуальна для MySQL 8.0+, поддерживает Unicode 9.0.
**2. Настройка на уровне сервера (my.cnf / my.ini)**
ini
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
**3. Настройка базы данных и таблицы**
sql
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
);
**4. Настройка соединения**
Перед выполнением запросов обязательно задайте кодировку соединения:
sql
SET NAMES utf8mb4;
SET CHARACTER SET utf8mb4;
В PHP (PDO):
php
$pdo = new PDO(‘mysql:host=localhost;dbname=mydb;charset=utf8mb4’, $user, $pass);
**5. Запрос LIKE с кириллицей**
sql
SELECT * FROM users WHERE name LIKE ‘%Иван%’;
Если коллация задана правильно, этот запрос вернёт строки, содержащие «Иван», «иван», «ИВАН» и другие регистровые варианты.
**6. Использование COLLATE в запросе**
Если коллация столбца отличается от нужной, можно указать её прямо в запросе:
sql
SELECT * FROM users
WHERE name COLLATE utf8mb4_unicode_ci LIKE ‘%иван%’;
**7. Полнотекстовый поиск как альтернатива**
Для больших таблиц LIKE по шаблону `%слово%` не использует индексы и работает медленно. Рассмотрите полнотекстовый поиск:
sql
ALTER TABLE users ADD FULLTEXT INDEX ft_name (name);
SELECT * FROM users WHERE MATCH(name) AGAINST(‘Иван’ IN BOOLEAN MODE);
**8. Проверка текущих настроек**
sql
SHOW VARIABLES LIKE ‘character%’;
SHOW VARIABLES LIKE ‘collation%’;
Следуя этим шагам, вы обеспечите корректный поиск по частичному совпадению с поддержкой кириллицы и любых других многобайтовых символов в MySQL с кодировкой UTF8MB4.
