MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

AWS RDS :"SQLSTATE[22001] - Données trop longues pour la colonne" avec MariaDB 10.2

Nous avons une application PHP avec AWS RDS MariaDB comme backend.

Sur la version 10.0 utilisée précédemment, tout allait bien, mais juste après la mise à niveau vers MariaDB 10.2, des erreurs se sont produites lors des tests :

PDOException : SQLSTATE[22001] : Données de chaîne, tronquées à droite :1406 Données trop longues pour la colonne "nom" à la ligne 1 dans /data/projects/projectname/vendor/yiisoft/yii2/db/Command.php:1290

La première solution ici pourrait être simplement de changer le type de la colonne à partir du VARCHAR au LONGTEXT , comme ça:

MariaDB [dbname]> ALTER TABLE table_name MODIFY column_name LONGTEXT;

Mais dans le cas présent, ce ne sera pas la bonne manière.

La solution

Vérifiez sql_mode sur l'ancien MariaDB RDS avec le 10.0 :

MariaDB [(none)]> select @@sql_mode;
+------------+
| @@sql_mode |
+------------+
|            |
+------------+

Et sur le nouveau, avec le 10.2 :

MariaDB [dbname]> select @@sql_mode;
+-------------------------------------------------------------------------------------------+
| @@sql_mode                                                                                |
+-------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------+

Et jetez un œil au groupe de paramètres qui est attaché au nouveau RDS :

Voici ce dont nous avons besoin ici :les STRICT_TRANS_TABLES :

Si une valeur n'a pas pu être insérée telle qu'elle a été donnée dans une table transactionnelle, abandonnez l'instruction.

Maintenant, il faut remplacer la valeur par défaut ""STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION ":" valeur pour le NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION :

Reconnectez-vous à la console MySQL et vérifiez à nouveau :

MariaDB [(none)]> select @@sql_mode;
+--------------------------------------------+
| @@sql_mode                                 |
+--------------------------------------------+
| NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+

Terminé.

Articles similaires

  • 08/08/2019 AWS RDS :SQLSTATE[22001] – Données trop longues pour la colonne MariaDB 10.2
  • 14/05/2019 AWS :MariaDB RDS - kill :vous n'êtes pas propriétaire du fil
  • 13/12/2016 AWS :RDS Aurora db.t2.medium vs t2.nano et MariaDB
  • 09/03/2016 AWS :modèle RTFM, élément n° 2 :ручное создание инфраструктуры – AIM, S3, RDS et EBS