Руководство: Как развернуть сайт на 1С-Битрикс на хостинге с MySQL 5.x
Решение ошибки Unknown collation: 'utf8mb4_0900_ai_ci'
Введение
При переносе сайта на 1С-Битрикс с современного хостинга (где используется MySQL 8.0) на более старый сервер (с MySQL 5.7 или MariaDB 10.x) часто возникает критическая ошибка базы данных:
Mysql query error: (1273) Unknown collation: 'utf8mb4_0900_ai_ci'
Причина: В MySQL 8.0 кодировка сравнения (collation) utf8mb4_0900_ai_ci используется по умолчанию. Старые версии MySQL просто не знают о её существовании и отказываются выполнять SQL-запросы с её упоминанием.
Данное руководство описывает пошаговый алгоритм успешного развертывания сайта (как из резервной копии, так и чистого) на окружении с MySQL 5.x.
Часть 1. Подготовка дампа базы данных
Если вы восстанавливаете сайт из резервной копии, созданной на MySQL 8, вам обязательно нужно изменить кодировку в SQL-дампе до его загрузки на новый сервер.
Вариант А: Для пользователей Windows (Файлы до ~500 МБ)
- Откройте файл
.sqlв продвинутом текстовом редакторе (рекомендуется Notepad++, VS Code или Sublime Text). Не используйте стандартный "Блокнот" Windows. - Нажмите
Ctrl + H(Поиск и замена). - В поле Найти введите:
utf8mb4_0900_ai_ci - В поле Заменить на введите:
utf8mb4_unicode_ci - Нажмите Заменить все и сохраните файл.
Вариант Б: Для Linux/macOS или больших файлов (Рекомендуемый)
Если дамп весит несколько гигабайт, текстовые редакторы зависнут. Используйте консольную утилиту sed. Это займет несколько секунд:
sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g' dump.sql
Замените dump.sql на реальное имя вашего файла.
Важно: Если вы восстанавливаете стандартную резервную копию Битрикса (
.tar.gz), сначала распакуйте архив, найдите внутри файл.sql, примените к нему замену, а затем загрузите файлы на сервер.
Часть 2. Исправление конфигурационных файлов Битрикс
Даже если база данных импортирована успешно, ядро Битрикс может пытаться принудительно установить старую кодировку при каждом подключении. Необходимо проверить и исправить три ключевых файла.
1. Файл /bitrix/php_interface/after_connect_d7.php
Именно этот файл чаще всего вызывает ошибку сразу после подключения.
- Откройте файл.
- Найдите строку вида:
$connection->queryExecute("SET NAMES 'utf8mb4' COLLATE 'utf8mb4_0900_ai_ci'"); - Закомментируйте её (добавьте
//в начало) или удалите. Если файл содержит только эту строку, его можно просто очистить.
2. Файл /bitrix/.settings.php
Это основной файл настроек ядра D7.
- Откройте файл и найдите массив
'connections'. - Найдите ключ
'collation'. - Замените значение:
// Было: 'collation' => 'utf8mb4_0900_ai_ci', // Стало: 'collation' => 'utf8mb4_unicode_ci',
3. Файл /bitrix/php_interface/dbconn.php
- Откройте файл и найдите константу
DBCollation. - Приведите её к следующему виду:
define("DBCollation", "utf8mb4_unicode_ci"); - Убедитесь, что рядом присутствует строка:
define("BX_UTF", true);
Часть 3. Развертывание "чистого" Битрикс на MySQL 5.x
Если вы устанавливаете дистрибутив "1С-Битрикс: Управление сайтом" с нуля на старый хостинг:
- Убедитесь, что в файлах
.settings.phpиdbconn.phpуже прописана корректная кодировкаutf8mb4_unicode_ciдо первого запуска сайта. - При создании новой базы данных через панель хостинга (cPanel, ISPmanager и т.д.) явно указывайте сравнение (Collation):
utf8mb4_unicode_ci.
Часть 4. Финальная настройка и очистка кэша
После изменения файлов конфигурации и импорта базы данных обязательно очистите кэш, иначе Битрикс будет использовать старые, закэшированные настройки подключения.
- Зайдите на сервер по FTP или через файловый менеджер хостинга.
- Перейдите в папку
/bitrix/. - Удалите (или переименуйте) следующие директории:
/bitrix/cache//bitrix/managed_cache//bitrix/stack_cache//bitrix/html_pages/(если используется композит)
Не бойтесь: эти папки автоматически создадутся заново при первом же посещении сайта.
Если появились "кракозябры" вместо русского текста
Выполните в phpMyAdmin или консоли MySQL следующий запрос:
ALTER TABLE `имя_таблицы` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Важно: Сделайте бэкап базы данных перед массовым изменением кодировки таблиц!
Важное примечание о безопасности
Версии MySQL 5.7 и ниже официально достигли конца срока поддержки (End of Life) и более не получают обновлений безопасности от Oracle.
Данная инструкция является временным решением для миграции или запуска на устаревшем окружении. В долгосрочной перспективе настоятельно рекомендуется обновить СУБД на хостинге до MySQL 8.0 или актуальной версии MariaDB 10.6+, что полностью исключит подобные проблемы совместимости и повысит производительность сайта.
Статья актуальна для редакций 1С-Битрикс: Управление сайтом и Корпоративный портал.