Если вы пытаетесь сохранить сообщение с emoji в CRM Битрикс24 или на сайте «1С-Битрикс», но видите вместо смайликов знаки вопроса или пустые квадраты — причина почти всегда одна: база данных MySQL использует кодировку utf8 вместо utf8mb4. В этой статье разберём, как включить поддержку emoji в Битрикс, последовательно выполнив конвертацию базы данных.
Почему emoji не сохраняются в Битрикс
Стандартная кодировка utf8 в MySQL — это не полноценный UTF-8. Она поддерживает только символы, которые занимают до 3 байт, тогда как большинство emoji требуют 4 байта (так называемые символы из дополнительных плоскостей Unicode). Когда вы вставляете emoji в текстовое поле, MySQL просто отрезает строку на месте четырёхбайтового символа или заменяет его знаком вопроса.
Решение — конвертировать базу данных и её таблицы в кодировку utf8mb4 («mb4» означает «multi-byte, 4 bytes»). Именно она соответствует настоящему UTF-8 и поддерживает весь диапазон Unicode, включая emoji.
Шаг 1: Резервная копия базы данных
Перед любыми изменениями в базе данных обязательно сделайте резервную копию. Это займёт несколько минут, но сохранит вам часы работы в случае ошибки.
mysqldump -u root -p название_базы > /home/backup_before_utf8mb4.sql
Убедитесь, что файл дампа создан и имеет ненулевой размер:
ls -lh /home/backup_before_utf8mb4.sql
Шаг 2: Конвертация базы данных и таблиц через SQL
Подключитесь к MySQL и выполните следующие команды. Сначала меняем charset самой базы данных:
ALTER DATABASE название_базы CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Затем нужно конвертировать каждую таблицу. Если таблиц много, удобнее сгенерировать команды автоматически:
SELECT CONCAT('ALTER TABLE `', TABLE_NAME, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'название_базы'
AND TABLE_TYPE = 'BASE TABLE';
Скопируйте и выполните полученные ALTER TABLE команды. Для небольших баз это можно сделать одной процедурой. Обратите внимание: конвертация таблиц может занять несколько минут на больших объёмах данных — в этот момент таблицы будут заблокированы для записи.
Шаг 3: Изменение настроек подключения в Битрикс
После конвертации БД нужно сообщить Битриксу, что соединение должно использовать utf8mb4. Откройте файл настроек подключения:
/bitrix/.settings.php
Найдите секцию connections и добавьте параметры charset:
'connections' => array(
'value' => array(
'default' => array(
'className' => '\\Bitrix\\Main\\DB\\MysqliConnection',
'host' => 'localhost',
'database' => 'название_базы',
'login' => 'пользователь',
'password' => 'пароль',
'options' => 2,
'charset' => 'utf8mb4', // добавить эту строку
),
),
),
Также откройте файл /bitrix/php_interface/dbconn.php и убедитесь, что в нём указан правильный charset, либо добавьте строку после подключения к БД:
$DBType = "mysql"; $DBHost = "localhost"; $DBLogin = "пользователь"; $DBPassword = "пароль"; $DBName = "название_базы"; $DBCharset = "utf8mb4";
Шаг 4: Изменение конфигурации MySQL (my.cnf / my.ini)
Чтобы изменения были постоянными и новые соединения по умолчанию использовали utf8mb4, отредактируйте конфигурационный файл MySQL. На Linux обычно это /etc/mysql/my.cnf или /etc/my.cnf:
[client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci
После редактирования перезапустите MySQL:
systemctl restart mysql # или для более старых систем: service mysql restart
Шаг 5: Проверка поддержки emoji
Проверьте текущие настройки charset в MySQL после перезапуска:
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
Все переменные character_set_* должны показывать utf8mb4. После этого зайдите на сайт или в Битрикс24 и попробуйте сохранить текст с emoji — например, сохраните комментарий к сделке в CRM с символом 😀.
Возможные ошибки и их решение
Ошибка: Specified key was too long; max key length is 767 bytes
Эта ошибка возникает при конвертации таблиц с индексами по длинным VARCHAR-полям. utf8mb4 использует до 4 байт на символ, что увеличивает размер индексов. Решение — включить innodb_large_prefix и innodb_file_format = Barracuda в my.cnf, либо уменьшить длину индексируемого поля.
Ошибка: Incorrect string value при вставке
Если конвертация выполнена, но ошибка сохраняется — проверьте, что charset соединения действительно utf8mb4. Выполните после подключения:
SET NAMES utf8mb4; SHOW VARIABLES LIKE 'character_set_connection';
Битрикс не видит изменения после редактирования .settings.php
Очистите кэш Битрикса: удалите содержимое директории /bitrix/cache/ и /bitrix/managed_cache/, либо воспользуйтесь инструментом очистки кэша в административной панели через Настройки → Производительность → Очистить кэш.
После выполнения всех шагов ваш сайт на Битрикс полностью поддерживает emoji и любые четырёхбайтовые Unicode-символы. Конвертация в utf8mb4 — это также хорошая практика для обеспечения совместимости с современными стандартами хранения данных.
