Немного о кодировках и представлениях
Кодировка (character set) — это способ описания набора символов. Например, UTF-8, ASCII, KOI8-R, CP1251. Представление (collation) — способ описания порядка букв в кодировках, который используется для сортировок. Рассмотрим основные отличия представлений.
В utf8_bin всё регистрозависимо. Символ 'A' не равен символу 'a' при поиске, а сортировка происходит в порядке следования в таблице символов для данной кодировки.
Представления, названия которых оканчиваются на _ci (case-insensitive), не увидят разницы между 'aAA' и 'aaa' при поиске и различаются только способами сортировки.
utf8_general_ci работает быстрее, потому что при сортировке не учитываются особенности в порядке букв в некоторых языках. Например, ÀÁÅåāă = A или ü = U.uft8_unicode_ci — чуть медленнее, но сортировки будут правильные во всех языках. Например, ß (эсцет немецкий) будет располагаться рядом с ss.
К сожалению, в документации написано что utf8mb4 кодировка в Битриксе не поддерживается.
Но давайте попробуем сконвертировать БД из utf8 в utf8mb4.
Кодировка существующей базы
Это самое сложное, сделать конвертацию действующей базы на рабочем проекте, просто поменять сравнение у базы и таблиц будет недостаточно, еще нужно задать сравнение и кодировку всем полям таблицы типа: 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
Результат
Теперь вы можете использовать эмодзи в своих проектах.