Николаев Виталий
Блог веб-разработчика: Битрикс, PHP, Python, Linux и SEO
Битрикс Битрикс
12.06.2024

Битрикс. Ошибка! innodb_strict_mode=ON, требуется OFF

В некоторых проектах на 1С-Битрикс после обновления MySQL или MariaDB появляются ошибки, связанные с:

innodb_strict_mode=ON

Особенно часто проблема возникает:

  • на новых версиях MySQL;
  • в MariaDB;
  • после миграции сервера;
  • после обновления Debian/Ubuntu;
  • при переносе старых проектов Битрикс.

Как отключить innodb_strict_mode в Битрикс

Открываем файл:

/bitrix/php_interface/after_connect_d7.php

И добавляем строку:

$this->queryExecute("SET innodb_strict_mode=0");

Полный пример

<?
$this->queryExecute("SET innodb_strict_mode=0");
?>

Что делает after_connect_d7.php

Файл:

after_connect_d7.php

выполняется:

  • после подключения к базе данных;
  • для каждого нового соединения.

Это позволяет:

  • изменять SQL-настройки;
  • задавать timezone;
  • выполнять SET-параметры MySQL.

Что такое innodb_strict_mode

Параметр:

innodb_strict_mode

включает строгую проверку SQL-операций InnoDB.

При:

innodb_strict_mode=ON

MySQL начинает жестче проверять:

  • типы данных;
  • индексы;
  • размеры строк;
  • формат таблиц;
  • некорректные значения.

Какие ошибки возникают в Битрикс

Часто появляются ошибки:

Specified key was too long

или:

Row size too large

а также:

innodb_strict_mode=ON required OFF

Почему это происходит

Старые версии Битрикс и некоторые модули создавались:

  • под старые версии MySQL;
  • без strict mode;
  • с устаревшими ограничениями InnoDB.

Почему лучше отключать локально

Использование:

SET innodb_strict_mode=0

внутри подключения Битрикс лучше, чем глобальное отключение в my.cnf.

Потому что:

  • не затрагиваются другие проекты;
  • не ломаются сторонние сервисы;
  • изменение действует только для Битрикс.

Где еще можно отключить strict mode

Глобально:

/etc/mysql/my.cnf

или:

/etc/mysql/mariadb.conf.d/

Но это менее безопасный вариант.

Проверка текущего режима

Проверить текущий режим можно SQL-запросом:

SHOW VARIABLES LIKE 'innodb_strict_mode';

Когда используется after_connect_d7.php

  • настройка timezone;
  • SET NAMES;
  • SQL MODE;
  • локальные параметры MySQL;
  • оптимизация соединения.

Итог

Если 1С-Битрикс ругается на:

innodb_strict_mode=ON

можно отключить strict mode для соединения Битрикс через:

/bitrix/php_interface/after_connect_d7.php

добавив строку:

$this->queryExecute("SET innodb_strict_mode=0");
40 просмотров

Комментарии

Где заказы?
Почему у одних компаний очередь из клиентов, а у других пустой сайт и тишина?
Телеграм канал «Где заказы?» — про продажи, сайты и ошибки бизнеса на реальных примерах. Подписаться