AWSRDSMariaDBをバックエンドとして使用するPHPアプリケーションがあります。
以前に使用した10.0バージョンではすべて問題ありませんでしたが、MariaDB 10.2にアップグレードした直後、テスト中にエラーが発生しました:
PDOException:SQLSTATE [22001]:文字列データ、右切り捨て:1406/data/projects/projectname/vendor/yiisoft/yii2/db/Command.php:1290
の行1の列「name」に対してデータが長すぎます
ここでの最初の解決策は、列のタイプをVARCHAR
から変更するだけです。 LONGTEXT
へ 、そのように:
MariaDB [dbname]> ALTER TABLE table_name MODIFY column_name LONGTEXT;
しかし、この現在のケースでは、これは正しい方法ではありません。
ソリューション
sql_mode
を確認してください 10.0の古いMariaDBRDSでは:
MariaDB [(none)]> select @@sql_mode;
+------------+
| @@sql_mode |
+------------+
| |
+------------+
そして、新しいものでは、10.2で:
MariaDB [dbname]> select @@sql_mode;
+-------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------+
そして、パラメータグループを見てください。 これは新しいRDSに付属しています:
ここに必要なものは次のとおりです– STRICT_TRANS_TABLES
:
トランザクションテーブルに指定された値を挿入できなかった場合は、ステートメントを中止します。
ここで、デフォルトの「」 STRICT_TRANS_TABLES、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTIONを上書きする必要があります。 NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
の「:」値 :
MySQLコンソールに再接続し、もう一度確認します。
MariaDB [(none)]> select @@sql_mode;
+--------------------------------------------+
| @@sql_mode |
+--------------------------------------------+
| NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
完了しました。
同様の投稿
- 2019年8月8日 AWS RDS:SQLSTATE [22001] –データが長すぎて列-MariaDB 10.2
- 2019年5月14日 AWS:MariaDB RDS –キル:あなたはスレッドの所有者ではありません
- 2016年12月13日 AWS:RDSAuroradb.t2.mediumとt2.nanoおよびMariaDB
- 2016年9月3日 AWS:миграцияRTFM、часть#2:ручноесозданиеинфраструктуры– AIM、S3、RDSおよびEBS