Николаев Виталий
Блог веб-разработчика: Битрикс, 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.

В своих проектах я использую серверную инфраструктуру Timeweb Cloud

VPS и облачные решения для стабильной работы сайтов на PHP и 1С-Битрикс — от корпоративных сайтов до интернет-магазинов и высоконагруженных веб-проектов.

Перейти на Timeweb Cloud
Реклама · ERID: CQH36pWzJqVJ4YD9t5y227AkMQdhpG2THarwRmX2g9tS8x

Что такое 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");
180 просмотров

Если возникли сложности

Помогу разобраться с настройкой, исправить ошибки и реализовать решение под ваш проект.

Поддержка сайтов на 1С-Битрикс

Поддержка сайтов на 1С-Битрикс: быстрое решение ошибок, консультации, обучение сотрудников и сопровождение сайта. 
Резервирую время под ваш проект для оперативной помощи и стабильной работы сайта.
Подробнее
Где заказы?

Почему один сайт стабильно приносит заявки, а другой годами просто «висит в интернете»?

В телеграм-канале «Где заказы?» я разбираю реальные ошибки бизнеса, SEO, сайты, рекламу, воронки продаж и показываю, почему компании теряют клиентов и как это исправить.

Без инфоцыганства и мотивационных цитат — только практика, кейсы и рабочие решения для бизнеса и веб-разработки.

Комментарии

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