sql >> Databáze >  >> RDS >> MariaDB

AWS RDS:„SQLSTATE[22001] – Data jsou příliš dlouhá pro sloupec“ pomocí MariaDB 10.2

Máme jako backend PHP aplikaci s AWS RDS MariaDB.

Na dříve používané verzi 10.0 bylo vše v pořádku, ale hned poté, co jsme upgradovali na MariaDB 10.2 – došlo během testů k chybám:

PDOException:SQLSTATE[22001]:Data řetězce, vpravo zkrácená:1406 Data jsou příliš dlouhá pro sloupec ‚name‘ na řádku 1 v /data/projects/projectname/vendor/yiisoft/yii2/db/Command.php:1290

Prvním řešením by zde mohla být pouze změna typu sloupce z VARCHAR do LONGTEXT , takhle:

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

Ale v tomto aktuálním případě to nebude správná cesta.

Řešení

Zkontrolujte sql_mode na staré MariaDB RDS s 10.0:

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

A na novém, s 10.2:

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

A podívejte se na skupinu Parametry který je připojen k novému RDS:

Zde je to, co potřebujeme – STRICT_TRANS_TABLES :

Pokud hodnotu nelze vložit do transakční tabulky tak, jak je uvedena, zrušte příkaz.

Nyní je potřeba přepsat výchozí „“STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION Hodnota „:“ do NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION :

Znovu se připojte ke konzole MySQL a znovu zkontrolujte:

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

Hotovo.

Podobné příspěvky

  • 08/08/2019 AWS RDS:SQLSTATE[22001] – Data jsou příliš dlouhá pro sloupec v MariaDB 10.2
  • 14.05.2019 AWS:MariaDB RDS – kill:Nejste vlastníkem vlákna
  • 13. 12. 2016 AWS:RDS Aurora db.t2.medium vs t2.nano a MariaDB
  • 09/03/2016 AWS:миграция RTFM, часть #2:ручное создание инфраструктуры – AIM, S3, RDS a EBS

  1. Podmnožina databáze – Jak na to v IRI Voracity

  2. Vyrovnávací paměti (kruh) v PostGIS

  3. Jak vytvořit nenulové omezení v oracle

  4. Jak zalomit dlouhé řádky textu ve výsledcích SQLite