При тестировании системы выдаются ошибки
В конфигах: $DB->Query(«SET NAMES ‘utf8′»); и $connection->queryExecute(«SET NAMES ‘utf8′»); В журнале проверки системы: Версия: Почему Битрикс ожидает utf8, разве она не устарела в пользу utf8mb3 и utf8mb4, равно как и utf8_unicode_ci? |
|||||||
Просто для битрикса цифра 8 мистическая: php 8, mysql 8, utf 8. Везде какие-то проблемы |
|
Пользователь 136059 Гуру Сообщений: 5430 |
#3 23.07.2021 17:30:44
Потому что он ожидает именно utf8 без мультибайтов. Голосуй за идеи по развитию API Bitrix: |
||
Не хочу никого оскорблять, но в очередной раз убеждаюсь в ущербности русскоязычных форумов. Почему на англоязычных ресурсах ( https://stackoverflow.com/ и иже с ними) пишут только конкретные ответы с решениями вопроса?! Да потому, что флуд полностью модерируется и уводится в бан модераторами и сообществом. А тут, судя по всему, ни модераторов активных, ни возможности заминусить ответ. В очередной раз Я и мои коллеги убедились в том, что тут можно и не задавать вопросы — бессмысленно почти что. |
|
Поднимаю вопрос. В Bitrix VM есть возможность апдейта MySQL до версии 8, откатить при этом как PHP нельзя. После апдейта ругается на utf8mb3. Насколько критична эта ошибка и как может сказаться на работе сайта? И как исправить. В системных требованиях Битрикс не указано, что MySQL 8 не поддерживается (по крайней мере не нашел). В целом, зачем добавили в Bitrix VM возможность апдейта php и Mysql до 8 версии, если Битрикс их не поддерживает? |
|
Пользователь 2505711 Заглянувший Сообщений: 1 |
#6 07.09.2021 15:05:06 У меня не получилось завести Битрикс 24 на Mysql 8. Проблема была с методом $DB->CharToDateFunction($char), при выводе ленты задач лезла ошибка: /bitrix/modules/tasks/classes/general/task.php Line: 5522 MySQL Query Error: SELECT TL.TASK_ID AS TASK_ID, COUNT(TL.TASK_ID) AS CNT FR OM b_tasks_log TL WHERE USER_ID != 1 AND ( (CREATED_DATE > » AND TASK_ID = 2263) ) GROUP BY TL.TASK_ID [[1525] Incorrect DATETIME value: »] Проблемы в методе $DB->CharToDateFunction($char), В моем конкретном случае он возвращал вместо даты пустую строку. На сколько я понимаю внутри этот метод выглядит как-то так:
В инетах пишут про это дело например здесь: https://habr.com/ru/post/476852/#comment_20914160 Разбираться более подробно времени не было — откатил все взад из бэкапа и остался пока на MySql5.7 да еще добавлю что SQL_MODE=’ALLOW_INVALID_DATES’ мне не помогло |
|
Пользователь 5037586 Заглянувший Сообщений: 1 |
#7 14.09.2021 16:16:59 А воз и ныне там.
Добрый день. Удалось решить проблему? Если удалось, то каким образом? У нас аналогичная. |
||||||||
Аналогичная проблема. Как вылечить ошибки кодировки бд? |
|
Пользователь 584821 Заглянувший Сообщений: 4 |
#10 22.10.2021 13:12:26 Здравствуйте! Я думаю проблема просто в коде проверки системмы. Не думают, что можно в after_connect написать другую кодировку с которой надо сравнивать.
Или могли regexp использовать. |
||
Пользователь 15906 Постоянный посетитель Сообщений: 170 |
#11 13.11.2021 02:02:36 Да, есть такая история, и к сожалению разработчики bx не особо стремятся к ее решению, точнее исправлению раздела «Проверка системы». В целом, то что пишет СУС при проверке кодировки БД utf8mb4 (utf8mb3), ничего страшного нет, т.к. начиная с версии mySQL8, обозначение utf8 является устаревшим и не рекомендуется к использованию. Они начинают приучать всех писать не просто utf8, а с конкретным указанием байт, по умолчанию по прежнему используется 3-х байтовая. MySQL :: MySQL 8.0 Reference Manual :: 10.9.3 The utf8 Character Set (Alias for utf8mb3) Лично я, после каждого обновления просто правлю файл bitrix/modules/main/classes/general/site_checker.php чтобы данный момент не мозолил глаза в «Проверке системы», т.к. я уже более года живу в 4-х байтовой (utf8mb4). Правится в 3-х местах, строка 2111:
Понятное дело, не призываю к данному действу |
||
Типичный русский софт — мы обновились до 8ки — ставь восьмёрку, только мы не обновили сайт чекер, а обращение от тебя не примим, так как есть ошибка в чекере сайта))) |
|
Как исправить ошибку? Перепробовал уже все варианты в инете со всеми вариациями, в тч менять чекер, менять в дбконне, менять в настройках sql? Ошибка! Сравнение соединения с базой данных должно быть utf8_unicode_ci, текущее значение: utf8mb3_unicode_ci.. У меня походу из-за этого не делаются резервные копии, во время которых выкидывает как раз на ошибке sql |
|
Добрый день! Проблема та же. В новой версии вообще нет файла after_connect. Кто победил эту проблему??? |
|
Пользователь 12233 Заглянувший Сообщений: 23 |
#15 06.10.2022 19:40:02 Была проблема такая. Причём в after_connect всё было прописано…. Поставил все обновления — проблема ушла… |
Исправляем ошибки кодировки таблиц
21.10.2021
1793
В результате проверки системы, Битрикс указал, что есть ошибки в Базе данных, но иногда автоматически он не может всё исправить, и тут приходится исправлять своими ручками.
Нажимая на знак вопроса мы видим подсказку от Битрикса где сообщает, что кодировка текущих наших таблиц, должна совпадать с кодировкой базы данных.
Если перейдем по ссылке на «журнал проверки системы», то увидим список тех таблиц, где не совпали кодировки, вот нам они и нужны, на скриншоте пометил стрелочками.
SQL запрос:
ALTER TABLE b_iblock_property_feature CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Где b_iblock_property_feature — это название таблицы, у Вас могут быть другие.
Таким образом я выписал и составил список sql запросов для всех своих таблиц из журнала.
ALTER TABLE b_iblock_property_feature CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_block CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_demo CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_domain CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_file CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_hook_data CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_manifest CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_placement CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_repo CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_site CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_syspage CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_template CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_template_ref CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_main_mail_blacklist CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_main_mail_sender CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_messageservice_message CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_messageservice_rest_app CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_messageservice_rest_app_lang CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_mobileapp_app CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_mobileapp_config CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_numerator CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_numerator_sequence CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rating_voting_reaction CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_ap CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_ap_permission CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_app CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_app_lang CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_app_log CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_event CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_event_offline CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_log CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_placement CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_stat CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_stat_method CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_seo_service_subscription CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_user_profile_history CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_user_profile_record CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_utm_iblock_6_section CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_utm_iblock_8_section CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_uts_iblock_6_section CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_uts_iblock_8_section CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
После того как Вы собрали список SQL запросов, заходим в админку сайта битрикс (Настройки — Инструменты — SQL-запрос) или по пути, вставляете после адреса сайта /bitrix/admin/sql.php
Возврат к списку
Проблемы с кодировкой на сайте часто встречаются после миграции с устаревшего серверного ПО (например, версии PHP) на новое.
Например, кодировка 1251 неактуальна для PHP старше версии 5.6. В связи с чем требуется изменение кодировки на UTF-8, которая является стандартом для последних версий PHP.
Если ваш сайт до миграции на наш хостинг работал в кодировке 1251, то при проверке системы вы можете видеть замечание: «Сайт работает в однобайтовой кодировке». Для исправления ситуации потребуется конвертировать сайт в UTF-8 или сделать изменения PHP-обработчика под кодировку 1251.
Следуйте шагам:
Исправьте настройки базы данных из панели 1С Битрикс в случае, если на странице /bitrix/admin/site_checker.php выводится ошибка: Ошибка! Кодировка базы (utf8) отличается от кодировки соединения (cp1251). [ Исправить ]
Если операция завершилась неуспешно, то повторно повторите исправление.
В редких случаях требуется ручное исправление из phpMyAdmin:
В панели хостинга в разделе «базы данных» перейдите в базу данных вашего сайта. После редиректа в phpMyAdmin войдите в раздел «операции» и в блоке «сравнение» выберите «utf-8_general_ci». Нажмите кнопку «вперед».
Редактирование php.ini для выбранной версии режиме PHP вашего сайта:
Убедитесь, что в настройках php.ini для выбранной версии PHP вашего сайта установлены значения:
Для варианта конвертации в utf-8:
mbstring.func_overload = 2
mbstring.internal_encoding = utf-8
default_charset = «utf-8»
Для варианта без конвертации (остается кодировка 1251):
mbstring.func_overload = 0
mbstring.internal_encoding = cp1251
default_charset = «cp1251»
Для однобайтовой кодировки (1251) также потребутеся отключить кодировку UTF-8 в панели хостинга в разделе «WWW-домены»:
Далее необходимо привести настройки согласно требуемой кодировке в файлах системы 1С Битрикс:
Для варианта корвертации в utf-8:
В /bitrix/php_interface/dbconn.php должно быть значение: define(‘BX_UTF’, true);
В /bitrix/.settings.php должно быть значение: ‘utf_mode’ => array (‘value’ => true, ‘readonly’ => true,),
Для варианта без конвертации (остается кодировка 1251):
В /bitrix/php_interface/dbconn.php полностью удалить значение: define(‘BX_UTF’, true);
В /bitrix/.settings.php должно быть значение: ‘utf_mode’ => array (‘value’ => false, ‘readonly’ => true,),
Некорректное отображение страниц из-за неправильной кодировки файла
ID статьи: 121
, создана 13 сен 2016 , последнее исправление 26 мар 2019
Актуально для:
- Аспро: Маркет
- Аспро: Крутой шоп
- Аспро: Интернет-магазин
- Аспро: Шины и диски, интернет-магазин
- Аспро: Оптимус
- Аспро: Корпоративный сайт современной компании
- Аспро: Корпоративный сайт
- Аспро: Корпорация
- Аспро: Сайт медицинского центра
- Аспро: Стройка
- Аспро: Курорт
Сайт информирует о наличии ошибки в кодировке файла, которая отличается от кодировки остального сайта. Необходимо исправить кодировку для корректного отображения страниц.
Решение
Ваш файл, в котором находится вызов компонента, сохранен в неверной кодировке. Нужно исправить кодировку и повторно загрузить файл.
Внимание! Перед любыми правками в структуре сайта настоятельно рекомендуем сделать внеплановую резервную копию сайта. Правки в компоненты ядра системы вносите с особой внимательностью: ошибки могут привести к нестабильной работе сайта.
Инструкция ниже предназначена для веб-разработчиков и программистов. Если вы не обладаете нужными навыками, обратитесь в техническую поддержку Аспро.
Переключитесь на административную часть сайта и перейдите в Рабочий стол → Контент → Структура сайта → Файлы и папки → bitrix → templates → aspro-stroy → components → bitrix → news → services. Найдите файл detail.php и через кнопку «гамбургер» войдите в режим «Редактирование как PHP».
Файл с неверной кодировкой будет казаться пустым. Вернитесь на шаг назад и в списке кнопки «гамбургер» выберите «Скачать файл».
Воспользуйтесь бесплатным приложением Notepad++, чтобы изменить кодировку. Установите приложение на свой компьютер и откройте в нем ваш файл. В меню «Кодировки» выберите пункт «Кодировка в UTF-8 (без BOM)». Сохраните файл.
Удалите старый файл. В списке кнопки «гамбургер» выберите пункт «Удалить».
Загрузите новый перекодированный файл. Нажмите кнопку «Загрузить файл» и выберите нужный.
09.11.2021
После установки Битрикса на новый сервер возникла проблема, при «самопроверке» CMS, сообщение:
Ошибка! Кодировка соединения с базой данных должна быть utf8, текущее значение: utf8mb3
Сам Битрикс рекомендовал:
но в конфигурационных файлах все был прописано верно.
Проверка Битрикса выполняется через Настройки — Инструменты — Проверка системы (/bitrix/admin/site_checker.php)
.
В итоге пришлось решать вопрос исправлением файла bitrix/modules/main/classes/general/site_checker.php, в блоке ниже, заменил
utf8 на utf8mb3 и
utf8_unicode_ci на utf8mb3_unicode_ci
if (defined('BX_UTF') && BX_UTF === true) { if ($character_set_connection != 'utf8mb3') $strError = GetMessage("SC_CONNECTION_CHARSET_WRONG", array('#VAL#' => 'utf8', '#VAL1#' => $character_set_connection)); elseif ($collation_connection != 'utf8mb3_unicode_ci') $strError = GetMessage("SC_CONNECTION_COLLATION_WRONG_UTF", array('#VAL#' => $collation_connection)); }
Ошибка! Сравнение для базы (utf8_general_ci) отличается от сравнения для соединения (utf8_unicode_ci)