понедельник, 21 ноября 2022 г.

Ошибка вставки данных в MariaDB Server 10.9.3 mysqli_sql_exception Data too long for column

В MariaDB Server версий больше 10.1.6 включены по умолчанию режимы, требующие четкого соблюдения типов вставляемых данных.
https://mariadb.com/kb/en/sql-mode/
Например, если вставляемые текстовые данные по объему больше, чем определено в типе поля, то будет возникать ошибка:
Fatal error: Uncaught mysqli_sql_exception: Data too long for column

Посмотреть, какие режимы установлены в текущей инсталляции можно так:
MariaDB [(none)]> SELECT @@SESSION.sql_mode
    -> ;
+-------------------------------------------------------------------------------------------+
| @@SESSION.sql_mode                                                                        |
+-------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------+


Режим STRICT_TRANS_TABLES - как раз отвечает за контроль того, что длинна строки вставляемых данных должна быть меньше определенной
в структуре таблицы значения. Можно отключить этот режим и тогда вставка данных будет происходить как в старых версиях - входная строка будет обрезаться до максимально возможного, определенного в структуре таблице.

Установку редима можно производить каждый раз при подключении к таблице, точно так же как мы устанавливаем режим кодировки:

$query="SET NAMES utf8";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);
$query="SET sql_mode = 'ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);

Комментариев нет:

Отправить комментарий