sql >> データベース >  >> RDS >> MariaDB

AWS RDS:「SQLSTATE [22001] –データが列に対して長すぎます」MariaDB10.2を使用

    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

    1. 最も近い日付を表示するSQLクエリ?

    2. MariaDBでのATAN()のしくみ

    3. MySQLに空の文字列が挿入されないようにするための制約

    4. SQL Server:両方にWHERE句がある2つのクエリでUNIONを使用するにはどうすればよいですか?