Skip to content

Всё для WordPress, веб-разработки — и не только

🛠 Меняем кодировку MySQL в Laragon: с latin1_swedish_ci на utf8mb4_unicode_ci

🛠 Меняем кодировку MySQL в Laragon: с latin1_swedish_ci на utf8mb4_unicode_ci

Создали базу в phpMyAdmin, развернули WordPress, а через неделю заметили: в таблицах кракозябры вместо текста. Открываете настройки, latin1_swedish_ci. Каждый, кто работает с Laragon на Windows, рано или поздно натыкается на этот сюрприз.

Проблема в том, что сборка MySQL, которую Laragon ставит из коробки, наследует древний дефолт: latin1 как набор символов и latin1_swedish_ci как сравнение. Для русского языка это катастрофа: кириллица пишется знаками вопроса или абракадаброй, сортировка строк ломается, плагины падают с ошибками.

Ниже, два изменения в одном файле, которые навсегда закрывают этот вопрос. Займет три минуты. Работает на Laragon 6, 5 и даже на древней четвёрке.

💡 Быстрый обзор:

  • Открываем my.ini через меню Laragon и добавляем две строки в секцию [mysqld]
  • Выбираем utf8mb4_unicode_ci как оптимальный вариант для WordPress в 2026 году (и разбираем почему именно он)
  • Сохраняем файл, перезапускаем MySQL и проверяем результат в phpMyAdmin
  • Бонус: как сменить кодировку уже созданной базы без потери данных

Почему кодировка по умолчанию вообще важна

MySQL работает с многоуровневой системой наследования: сервер → база данных → таблица → столбец. Если на уровне сервера задан latin1_swedish_ci, каждая новая база, если не указано иное при создании, унаследует именно его.

Для WordPress это критично, потому что:

  • Ядро, темы и большинство плагинов хранят контент в utf8mb4
  • При автоматическом создании базы через wp-config.php WordPress НЕ переопределяет серверный дефолт
  • Несовпадение кодировок сервера и таблиц даёт «невнятные» ошибки: ??? в админке, битые символы в JSON REST API, падения при экспорте

По данным W3Techs, WordPress используют 43,5% всех сайтов интернета, а сам движок с версии 4.2 требует utf8mb4 для полной поддержки эмодзи. Laragon, один из самых популярных локальных серверов под Windows, но его MySQL-сборка поставляется с консервативным дефолтом ради обратной совместимости. Отсюда и конфликт.

Шаг 1: Открываем my.ini через меню Laragon

Самый простой способ добраться до конфигурационного файла MySQL, встроенное меню Laragon:

  • Нажмите правой кнопкой мыши на иконку Laragon в трее
  • Выберите Menu → MySQL → my.ini
Меню Laragon с пунктом MySQL my.ini

Откроется Блокнот (или ваш редактор по умолчанию) с полным конфигом MySQL. Файл разбит на секции в квадратных скобках: [client], [mysqld] и [mysqldump]. Нас интересует [mysqld] (секция настроек демона MySQL).

Если по какой-то причине меню не открывает файл, найдите его вручную: C:\laragon\bin\mysql\<версия>\my.ini. В сборках Laragon 6 путь может быть C:\laragon\bin\mysql\mysql-8.0.30-winx64\my.ini, зависит от установленной версии.

Шаг 2: Добавляем две строки в секцию [mysqld]

Прокрутите файл до секции [mysqld] и добавьте в конец (перед следующей секцией, если она есть) две строки:

1character_set_server = utf8mb4
2collation_server = utf8mb4_unicode_ci

Что здесь происходит:

  • character_set_server = utf8mb4, сервер по умолчанию использует кодировку UTF-8 Multilingual Version 4, которая поддерживает ВСЕ символы Unicode, включая эмодзи, кириллицу, иероглифы
  • collation_server = utf8mb4_unicode_ci, правило сравнения строк: _unicode_ значит «по стандарту Unicode», _ci значит case-insensitive (регистронезависимое сравнение)

Добавлять нужно именно в [mysqld], не в [client] и не в [mysqldump]. Ошибка с секцией, самая частая причина «ничего не поменялось».

Полный фрагмент секции после правки выглядит примерно так:

1[mysqld]
2port=3306
3socket=/tmp/mysql.sock
4key_buffer_size=256M
5max_allowed_packet=512M
6character_set_server = utf8mb4
7collation_server = utf8mb4_unicode_ci

Шаг 3: Сохраняем файл и перезапускаем MySQL

Сохраните my.ini (Ctrl+S) и перезапустите MySQL. В Laragon это делается через то же меню:

  • Правый клик по иконке Laragon в трее
  • Menu → MySQL → Stop
  • Подождите 3-5 секунд
  • Menu → MySQL → Start

Альтернативно нажмите Menu → Перезапустить, Laragon сам остановит и запустит все службы разом.

После перезапуска новые базы данных будут создаваться с utf8mb4_unicode_ci по умолчанию. Старые базы НЕ меняются автоматически, о том, как сконвертировать существующую, читайте в блоке «Частые вопросы» ниже.

Шаг 4: Проверяем результат в phpMyAdmin

Откройте phpMyAdmin через меню Laragon (Menu → MySQL → phpMyAdmin) и создайте тестовую базу:

  • Нажмите «Создать БД»
  • Введите любое имя
  • Посмотрите на выпадающий список «Кодировка», теперь там по умолчанию стоит utf8mb4_unicode_ci
Окно создания базы в phpMyAdmin с кодировкой utf8_general_ci

Если выпадающий список всё ещё показывает latin1_swedish_ci, проверьте, что строки character_set_server и collation_server добавлены именно в секцию [mysqld], а не в [client], и что между названием параметра и знаком = нет лишних пробелов.

Быстрая проверка через SQL-запрос (выполните в phpMyAdmin на вкладке SQL):

1SHOW VARIABLES LIKE 'character_set_server';
2SHOW VARIABLES LIKE 'collation_server';

Обе переменные должны вернуть utf8mb4 и utf8mb4_unicode_ci соответственно.

Какую кодировку выбрать: сравнение вариантов

Тема кодировок MySQL обросла мифами, поэтому разложим по полочкам три актуальных варианта и один устаревший:

Кодировка

Версия MySQL

Эмодзи

Сортировка

Совместимость

Вердикт

utf8_general_ci

Любая

❌ Нет

Упрощённая, быстрая

Максимальная

Устарела, не используйте

utf8mb4_unicode_ci

5.5.3+

✅ Да

По стандарту Unicode (UCA 4.0)

Отличная

Рекомендуем для Laragon

utf8mb4_0900_ai_ci

8.0+

✅ Да

По UCA 9.0, AI (accent-insensitive)

Только MySQL 8+

Современный стандарт, но не везде

utf8mb4_general_ci

5.5.3+

✅ Да

Упрощённая

Отличная

Компромисс скорости и точности

Почему мы советуем utf8mb4_unicode_ci для локальной разработки в Laragon:

  • Laragon поставляет разные версии MySQL (от 5.7 до 8.0+), utf8mb4_0900_ai_ci появился только в MySQL 8.0 и отсутствует в MariaDB, которая часто идёт в альтернативных сборках
  • utf8mb4_unicode_ci работает везде, начиная с MySQL 5.5.3 (2010 год)
  • Разница в качестве сортировки между unicode_ci и 0900_ai_ci для типового WordPress-сайта незаметна
  • Хостинги на shared-тарифах часто используют MySQL 5.7, если локально разрабатывать на 0900_ai_ci, а на проде его нет, получите ошибку при переносе

Если вы точно знаете, что продакшен-сервер работает на MySQL 8.0+, а локальный Laragon использует MySQL 8.0, ставьте utf8mb4_0900_ai_ci. Это современный стандарт, рекомендованный Oracle, с лучшей поддержкой многоязычной сортировки.

Что насчёт utf8_general_ci? Он был актуален лет десять назад, когда utf8mb4 ещё не поддерживался массово. Сегодня у него два фатальных недостатка: не хранит эмодзи (WordPress в админке использует их активно) и упрощённо сортирует расширенные символы. Ставить его в 2026 году нет причин.

Видео: как сменить кодировку базы данных MySQL через phpMyAdmin

Текстовые инструкции, это хорошо, но иногда проще один раз увидеть. В этом 4-минутном видео показан полный процесс смены кодировки существующей базы данных через интерфейс phpMyAdmin, от выбора таблиц до финальной проверки:

⁉️🤔 Частые вопросы

У меня уже есть база данных с latin1_swedish_ci. Как сменить её кодировку?

Самый безопасный путь, через phpMyAdmin. Выберите базу слева, перейдите на вкладку «Операции», в блоке «Кодировки» выберите utf8mb4_unicode_ci и нажмите «Вперёд». phpMyAdmin сгенерирует ALTER-запросы для каждой таблицы. Перед операцией обязательно сделайте бэкап: вкладка «Экспорт» → формат SQL → «Вперёд».

Поменял my.ini, перезапустил MySQL, а в phpMyAdmin всё равно latin1_swedish_ci. В чём дело?

Три самые частые причины: (1) строки добавлены в [client] вместо [mysqld], проверьте, под какой квадратной скобкой они находятся; (2) MySQL не перезапустился, откройте диспетчер задач Windows и убедитесь, что процесс mysqld.exe исчез и появился заново; (3) в my.ini несколько секций [mysqld], так бывает после нескольких обновлений Laragon, оставьте одну.

Что лучше для WordPress: utf8mb4_unicode_ci или utf8mb4_general_ci?

Для WordPress разница минимальна. utf8mb4_unicode_ci точнее сортирует многоязычный контент (например, немецкое «ß» = «ss»), utf8mb4_general_ci чуть быстрее на больших объёмах, но разница в миллисекундах. Берите unicode_ci и не думайте.

Можно ли просто прописать кодировку в wp-config.php?

define('DB_CHARSET', 'utf8mb4') и define('DB_COLLATE', 'utf8mb4_unicode_ci') в wp-config.php влияют ТОЛЬКО на таблицы, которые создаёт сам WordPress при установке. Серверный дефолт при этом не меняется, и любая база, созданная вручную через phpMyAdmin, получит latin1_swedish_ci. Поэтому править my.ini всё равно нужно.

После смены кодировки часть текста на сайте превратилась в знаки вопроса. Это обратимо?

Да, но действовать нужно аккуратно. Знаки вопроса появляются, когда данные были записаны в latin1, а читаются как utf8. Решение: экспортируйте базу с флагом --default-character-set=latin1, затем импортируйте с --default-character-set=utf8mb4. Точная команда зависит от версии MySQL, поэтому сверьтесь с официальной документацией.

Итоги: что прописать в my.ini прямо сейчас

Если вы используете Laragon для локальной разработки WordPress-сайтов, две строки ниже решат проблему с кодировкой раз и навсегда:

1character_set_server = utf8mb4
2collation_server = utf8mb4_unicode_ci

Этот вариант работает на любой версии MySQL от 5.5 до 8.4 и на всех актуальных сборках MariaDB. Он корректно хранит кириллицу, эмодзи и не создаёт сюрпризов при переносе базы с локалки на прод, независимо от того, на каком хостинге работает продакшен.

Остались вопросы по конкретной версии Laragon или нестандартной конфигурации? Загляните в тему на форуме Laragon, там разработчики обсуждают нюансы настройки кодировок, включая Docker-сборки и кастомные порты. А если статья сэкономила вам вечер, расскажите о ней коллегам, которые тоже мучаются с latin1_swedish_ci.