Кодировка таблицы "b_abtest" (utf8mb4) отличается от кодировки базы (utf8mb3)
Ошибка кодировки таблиц в БД Bitrix
При переносе сайта на новый сервер на платформе Bitrix может возникнуть ошибка несовпадения кодировки таблиц базы данных. Кодировка таблиц в БД не совпадает с кодировкой самой базы данных. Эта ошибка может повлиять на правильную работу сайта, особенно если используются символы из разных языков.
Описание проблемы:
После переноса сайта на новый сервер, вы можете столкнуться с сообщением об ошибке, подобным следующему:
Ошибка Кодировки таблиц в БД (check_mysql_table_charset): Fail Кодировка таблицы "b_abtest" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка поля "SITE_ID" таблицы "b_abtest" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка поля "ACTIVE" таблицы "b_abtest" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка поля "ENABLED" таблицы "b_abtest" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка поля "NAME" таблицы "b_abtest" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка поля "DESCR" таблицы "b_abtest" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка поля "TEST_DATA" таблицы "b_abtest" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка таблицы "b_translate_phrase_fts_en" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка поля "PHRASE" таблицы "b_translate_phrase_fts_en" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка таблицы "b_utm_iblock_3_section" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка поля "VALUE" таблицы "b_utm_iblock_3_section" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка таблицы "b_uts_iblock_3_section" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка поля "UF_TM_MAX_START" таблицы "b_uts_iblock_3_section" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка поля "UF_TM_MIN_FINISH" таблицы "b_uts_iblock_3_section" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка поля "UF_TM_MIN_DURATION" таблицы "b_uts_iblock_3_section" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка поля "UF_TM_REPORT_TPL" таблицы "b_uts_iblock_3_section" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка поля "UF_TM_TIME" таблицы "b_uts_iblock_3_section" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка поля "UF_TM_DAY" таблицы "b_uts_iblock_3_section" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка поля "UF_TM_REPORT_DATE" таблицы "b_uts_iblock_3_section" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка поля "UF_DELAY_TIME" таблицы "b_uts_iblock_3_section" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка поля "UF_LAST_REPORT_DATE" таблицы "b_uts_iblock_3_section" (utf8mb4) отличается от кодировки базы (utf8mb3) Кодировка поля "UF_SETTING_DATE" таблицы "b_uts_iblock_3_section" (utf8mb4) отличается от кодировки базы (utf8mb3)
Это связано с тем, что таблицы в вашей базе данных используют кодировку `utf8mb4`, а сама база данных использует кодировку `utf8mb3`. Для корректной работы необходимо привести кодировки таблиц и столбцов в соответствие с кодировкой базы данных.
Сбор данных
Сравним кодировку бд и таблиц
#!/bin/bash # Параметры подключения к базе данных HOST="localhost" DATABASE="dbbitrix" USER="userbitrix" PASSWORD="BdAzj8S#35hrsu5c" # Проверка кодировки базы данных echo "Кодировка базы данных '$DATABASE':" mysql -h "$HOST" -u "$USER" -p"$PASSWORD" -N -e "SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '$DATABASE';" # Проверка кодировки всех таблиц в базе данных echo -e "\nКодировка таблиц в базе '$DATABASE':" mysql -h "$HOST" -u "$USER" -p"$PASSWORD" -N -e "SELECT TABLE_NAME, TABLE_COLLATION FROM information_schema.TABLES WHERE TABLE_SCHEMA = '$DATABASE' ORDER BY TABLE_NAME;" echo "Готово!"
Решение:
Для решения проблемы необходимо выполнить несколько команд, которые обновят кодировку всех таблиц в базе данных на `utf8mb4` с сортировкой `utf8mb4_0900_ai_ci`. Для этого можно использовать следующий Bash-скрипт, который автоматизирует процесс изменения кодировок.
Шаг 1: Создание и запуск скрипта
Создайте файл с расширением `.sh` (например, `update_charset.sh`), и вставьте в него следующий код:
#!/bin/bash DB_NAME="dbbitrix" # Получаем кодировку базы данных db_charset=$(mysql -D"$DB_NAME" -Bse "SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '$DB_NAME';") db_collation=$(mysql -D"$DB_NAME" -Bse "SELECT DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '$DB_NAME';") # Получаем список таблиц tables=$(mysql -D"$DB_NAME" -Bse "SHOW TABLES;") # Применяем ALTER TABLE для каждой таблицы for table in $tables; do echo "Изменение кодировки таблицы: $table" mysql -D"$DB_NAME" -e "ALTER TABLE $table CONVERT TO CHARACTER SET $db_charset COLLATE $db_collation;" done
Шаг 2: Запуск скрипта на сервере
Для выполнения скрипта выполните следующие команды на вашем сервере:
chmod +x update_charset.sh ./update_charset.sh
Что делает этот скрипт?
Этот скрипт:
- Получает список всех таблиц в базе данных;
- Для каждой таблицы выполняет команду `ALTER TABLE`, чтобы изменить кодировку таблицы и всех ее столбцов на `utf8mb4` с сортировкой `utf8mb4_0900_ai_ci`;
- После выполнения скрипта, все таблицы будут иметь единую кодировку, соответствующую базе данных.
Результат
После того как скрипт будет выполнен, кодировка всех таблиц в базе данных будет приведена в соответствие с требуемой кодировкой. Теперь ваш сайт должен работать корректно, и проблемы с кодировками больше не будут возникать.
Примечания:
- Перед запуском скрипта сделайте резервную копию вашей базы данных.
- Проверьте, что ваш сервер поддерживает кодировку `utf8mb4`.
- После изменения кодировки таблиц, возможно, потребуется перезагрузить сервер базы данных или Bitrix.
Оставить комментарий