sql >> Database teknologi >  >> RDS >> MariaDB

AWS RDS:"SQLSTATE[22001] - Data for lange til kolonne" ved hjælp af MariaDB 10.2

Vi har en PHP-applikation med AWS RDS MariaDB som backend.

På den tidligere brugte 10.0-version var alt godt, men lige efter vi opgraderede til MariaDB 10.2 – fik vi fejl under test:

PDOException:SQLSTATE[22001]:Strengdata, højre trunkeret:1406 Data for lange til kolonne 'navn' i række 1 i /data/projects/projectname/vendor/yiisoft/yii2/db/Command.php:1290

Den første løsning her kunne være blot ved at ændre kolonnens type fra VARCHAR til LONGTEXT , sådan:

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

Men i dette aktuelle tilfælde vil dette ikke være den rigtige måde.

Løsningen

Tjek sql_mode på den gamle MariaDB RDS med 10.0:

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

Og på den nye med 10.2:

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

Og tag et kig på Parametergruppen som er knyttet til den nye RDS:

Her er, hvad vi har brug for her – STRICT_TRANS_TABLES :

Hvis en værdi ikke kunne indsættes som angivet i en transaktionstabel, skal du afbryde sætningen.

Nu skal du overskrive standard ""STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION ":" værdi til NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION :

Genopret forbindelse til MySQL-konsollen, og tjek igen:

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

Færdig.

Lignende indlæg

  • 08/08/2019 AWS RDS:SQLSTATE[22001] – Data for lange til kolonne i MariaDB 10.2
  • 14/05/2019 AWS:MariaDB RDS – dræb:Du er ikke ejer af tråden
  • 13/12/2016 AWS:RDS Aurora db.t2.medium vs t2.nano og MariaDB
  • 09/03/2016 AWS:миграция RTFM, часть #2:ручное создание инфраструктуры – AIM, S3, RDS og EBS

  1. Oracle sammenligner tidsstempel med dato

  2. Beregn tidsforskellen mellem to rækker

  3. MariaDB CHARACTER_LENGTH() Forklaret

  4. Automatiseret test af desktopapplikationen:overblik over hensigtsmæssighed og rammer