Как реализовать поиск по частичному совпадению (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.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.