Кодировка MySQL-сервера
Можно в самом конфиге MySQL (my.cnf) задать кодировку сервера и соединения по умолчанию.
Но если вы в этом ничего не понимаете, то пропустите этот шаг, достаточно будет настроить это в config Битрикса для конкретного сайта, а не всего сервера.
[mysqld]
character-set-server=utf8
collation-server=utf8_unicode_ci
init-connect="SET NAMES utf8 COLLATE utf8_unicode_ci"
Кодировка новой базы
Если создается новая база под новый проект, например в программе HeidiSQL, то достаточно задать сравнение, все новые таблицы будут использовать сравнение базы, тут все просто.
Кодировка существующей базы
Это самое сложное, сделать конвертацию действующей базы на рабочем проекте, просто поменять сравнение у базы и таблиц будет недостаточно, еще нужно задать сравнение и кодировку всем полям таблицы типа: char, varchar, tinytext, text, mediumtext, longtext, enum, set, json
Для автоматизации конвертации всей базы есть скрипт busconvert.php, его нужно залить на сайт на Битриксе, в любое место, главное открыть его в браузере и нажать кнопку Начать конвертацию
BUSCONVERT v1.0.0
Сначала скрипт выводит текущие значения кодировки и сравнения до конвертации.
После нажатия на кнопку Начать конвертацию скрипт начнет конвертировать всю текущую базу сайта.
Выделено красным- текущие значения.Выделено желтым - кодировка, в которую скрипт будет конвертировать.
По окончании работы выводит результаты После конвертации и Лог конвертации, а также количество затронутых таблиц и новую кодировку базы, если все прошло успешно.
В таблице лога выводится новая кодировка и все SQL-запросы, которые совершал скрипт над данными полей каждой таблицы.
Здесь в запросах заменяем utf8 на utf8mb4 После успешной конвертации остается поменять настройки соединения с базой в 2-х файлах.
//bitrix/php_interface/after_connect_d7.php
$connection = \Bitrix\Main\Application::getConnection();
$connection->queryExecute("SET NAMES 'utf8mb4'");
$connection->queryExecute('SET collation_connection = "utf8mb4_unicode_ci"');//bitrix/php_interface/after_connect.php
$DB->Query("SET NAMES 'utf8mb4'");
$DB->Query('SET collation_connection = "utf8mb4_unicode_ci"');
А также в файле /bitrix/.settings.php
'utf_mode' =>
array(
'value' => true,
'readonly' => true,
),
Еще желательно сбросить весь кэш сайта, либо в админке, либо удалив вот эти папки с диска.
/bitrix/cache
/bitrix/managed_cache
/bitrix/stack_cache
/bitrix/html_pages/example.com
Все, это должно помочь, других настроек нет.