Как можно исправить ошибку базы данных, возникшую при обновлении Bitrix?

Добрый день! При попытке установить обновления ядра в Bitrix, я сталкиваюсь с ошибкой. У меня установлено ядро версии 21.700.0 и PHP версии 7.4.3. Я заметил, что ошибка появляется после начала установки модуля "Sale" версии 21.100.0. Может ли это быть связано с версией PHP, необходимо ли мне обновиться до версии 8? Либо проблема кроется в базе данных? Как я могу исправить эту ситуацию? 

<pre><code>&gt;MySQL Query Error: UPDATE b_sale_tp bst INNER JOIN b_landing_site bls ON CONCAT('landing_', bls.ID) = bst.CODE SET bst.NAME = CONCAT('Лендинг', ' (', bls.TITLE, ')') WHERE bst.NAME != CONCAT('Лендинг', ' (', bls.TITLE, ')') [[1267] Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '&lt;&gt;']
MySQL Query Error!</code></pre>
  • 14 марта 2025 г. 11:24
Ответы на вопрос 2
Ошибка, с которой вы столкнулись, связана с различиями в кодировках таблиц и колонок в вашей базе данных MySQL. В частности, вы имеете несовпадение кодировок `utf8_unicode_ci` и `utf8_general_ci`. Чтобы исправить эту проблему, необходимо привести все соответствующие таблицы и колонки к одной кодировке.

Вот шаги, которые вы можете предпринять для решения проблемы:

1. **Проверьте кодировки таблиц и полей**:
   Выполните запрос для проверки кодировок всех таблиц в вашей базе данных:

   ```sql
   SELECT TABLE_NAME, TABLE_COLLATION
   FROM information_schema.TABLES
   WHERE TABLE_SCHEMA = 'имя_вашей_базы_данных';
   ```

   Также проверьте кодировки полей:

   ```sql
   SELECT TABLE_NAME, COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME
   FROM information_schema.COLUMNS
   WHERE TABLE_SCHEMA = 'имя_вашей_базы_данных';
   ```

2. **Измените кодировку для таблиц и колонок**:
   Если вы обнаружите таблицы или колонки с различными кодировками, вы можете изменить их. Например, чтобы изменить коллации для таблицы `b_sale_tp`, вы можете использовать:

   ```sql
   ALTER TABLE b_sale_tp CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
   ```

   Для изменения конкретного поля:

   ```sql
   ALTER TABLE b_sale_tp MODIFY NAME VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci;
   ```

   Сделайте аналогичные изменения для таблицы `b_landing_site`.

3. **Проверьте свои запросы**:
   Если вы используете пользовательские запросы или функции, убедитесь, что они также соответствуют нужной кодировке.

4. **Обновите PHP (по желанию)**:
   Хотя ваш текущий PHP должен поддерживать обновление Bitrix, обновление до версии 8 может принести некоторые улучшения. Bitrix с 21.0 поддерживает PHP 8, и некоторые проблемы могут быть устранены в более новых версиях.

5. **После исправления**:
   После всех изменений, попробуйте снова выполнить обновление ядра Bitrix.

Если у вас остались вопросы или возникают новые ошибки, пожалуйста, дайте знать!
Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT)

Вот причина ошибки.

bst.NAME != CONCAT('Лендинг', ' (', bls.TITLE, ')')

А это - выражение, в котором она возникает.

Вы сравниваете значение поля, которое в структуре имеет COLLATE utf8_unicode_ci, и выражение, которое получает значение collation = utf8_general_ci из свойств поля bls.TITLE.

Выполните следующие запросы и внимательно изучите результат:
SHOW CREATE TABLE b_sale_tp;
SHOW CREATE TABLE b_landing_site;


Так что либо измените структуру таблиц, либо указывайте требуемый COLLATE явно в тексте запроса.

Пример
Похожие вопросы