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

誤った文字列値エラーを修正する方法は?

    更新 以下の答えに:

    質問されたとき、MySQLの「UTF8」はutf8mb3を意味していました 。それまでの間、utf8mb4 追加されましたが、私の知る限り、MySQL「UTF8」はutf8mb4を意味するように切り替えられませんでした 。

    つまり、「utf8mb4」という意味の場合は、具体的に「utf8mb4」を入力する必要があります(utf8mb4を使用する必要があります)。 )

    「UTF8」と言っても違いがあることを明確にするために、答えを編集するだけでなく、ここに残しておきます

    オリジナル

    データベース内のデータを台無しにしているので、Richiesの答えはお勧めしません。問題を修正することはできませんが、問題を「非表示」にして、クラップされたデータで重要なデータベース操作を実行できないようにします。

    このエラーが発生した場合は、送信しているデータがUTF-8でエンコードされていないか、接続がUTF-8ではありません。まず、データソース(ファイルなど)が本当に UTF-8です。

    次に、データベース接続を確認します。接続後にこれを行う必要があります:

    SET NAMES 'utf8mb4';
    SET CHARACTER SET utf8mb4;
    

    次に、データが格納されているテーブルにutf8mb4文字セットが設定されていることを確認します。

    SELECT
      `tables`.`TABLE_NAME`,
      `collations`.`character_set_name`
    FROM
      `information_schema`.`TABLES` AS `tables`,
      `information_schema`.`COLLATION_CHARACTER_SET_APPLICABILITY` AS `collations`
    WHERE
      `tables`.`table_schema` = DATABASE()
      AND `collations`.`collation_name` = `tables`.`table_collation`
    ;
    

    最後に、データベース設定を確認します:

    mysql> show variables like '%colla%';
    mysql> show variables like '%charac%';
    

    ソース、トランスポート、および宛先がutf8mb4の場合、問題は解消されています;)



    1. MariaDB CURRENT_ROLE()の説明

    2. SQLで複数のテーブルを結合する

    3. SQLTとパーティショニング

    4. Postgresでのみ関数のバックアップを取る方法