Имеется PHP-приложение с бекендом AWS RDS MariaDB.
На версии 10.0 работало нормально, но после миграции на 10.2 – в логах начали появляться ошибки:
PDOException: SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column ‘name’ at row 1 in /data/projects/projectname/vendor/yiisoft/yii2/db/Command.php:1290
Вариант первый – это просто сменить тип колонки с VARCHAR
на LONGTEXT
, например так:
[simterm]
MariaDB [dbname]> ALTER TABLE table_name MODIFY column_name LONGTEXT;
[/simterm]
Но в данном случае это костыль.
Решение
Проверяем значение sql_mode
на старом сервере, с 10.0:
[simterm]
MariaDB [(none)]> select @@sql_mode; +------------+ | @@sql_mode | +------------+ | | +------------+
[/simterm]
И на новом, с 10.2:
[simterm]
MariaDB [dbname]> select @@sql_mode; +-------------------------------------------------------------------------------------------+ | @@sql_mode | +-------------------------------------------------------------------------------------------+ | STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +-------------------------------------------------------------------------------------------+
[/simterm]
И Parameters groups, которая подключена к данному RDS:
Нас тут интересует STRICT_TRANS_TABLES
:
If a value could not be inserted as given into a transactional table, abort the statement.
Задаём значения NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
, что бы перезаписать дефолтное значение “STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION“:
Переподключаемся к консоли, проверяем ещё раз:
[simterm]
MariaDB [(none)]> select @@sql_mode; +--------------------------------------------+ | @@sql_mode | +--------------------------------------------+ | NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +--------------------------------------------+
[/simterm]
Готово.