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

java.sql.SQLException:不正な文字列値:'\ xF0 \ x9F \ x91 \ xBD \ xF0 \ x9F ...'

    あなたが持っているのは EXTRATERRESTRIAL ALIEN (U+1F47D) および BROKEN HEART (U+1F494) これは基本多言語面にはありません。 Javaでは1文字として表現することもできません。"👽💔".length() == 4 。それらは間違いなくヌル文字ではなく、それらをサポートするフォントを使用していない場合は正方形が表示されます。

    MySQLのutf8 基本多言語面のみをサポートし、utf8mb4を使用する必要があります 代わりに

    補助文字の場合、utf8は文字をまったく格納できませんが、utf8mb4はそれを格納するために4バイトを必要とします。 utf8は文字をまったく格納できないため、補助文字inutf8列はなく、古いバージョンのMySQLからutf8データをアップグレードするときに、文字の変換やデータの損失について心配する必要はありません。

    したがって、これらの文字をサポートするには、MySQLが5.5以上であり、utf8mb4を使用する必要があります。 どこにでも。接続エンコーディングはutf8mb4である必要があります 、文字セットはutf8mb4である必要があります 照合はutf8mb4である必要があります 。 Javaの場合は、まだ"utf-8"です。 、しかしMySQLには区別が必要です。

    使用しているドライバーはわかりませんが、ドライバーに依存しない接続文字セットを設定する方法は、クエリを送信することです:

    SET NAMES 'utf8mb4'
    

    接続した直後。

    Connector/Jについてはこちらもご覧ください

    14.14:Connector / Jで4バイトUTF8、utf8mb4を使用するにはどうすればよいですか?

    Connector / Jで4バイトのUTF8を使用するには、MySQLサーバーをcharacter_set_server=utf8mb4で構成します。その後、Connector / Jは、characterEncodingにない限り、その設定を使用します 接続文字列に設定されています 。これは、文字セットの自動検出に相当します。

    列とデータベースも調整します:

    var1 varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
    

    繰り返しになりますが、utf8mb4をサポートするには、MySQLのバージョンが比較的最新である必要があります。



    1. MySQLでUNIONを使用する場合の「エラー1250(42000):SELECTの1つからのテーブル「…」をグローバルORDER句で使用できない」を修正

    2. OracleDatabaseでサポートされている言語のリスト

    3. Oracle:テーブルに属するすべてのトリガーを検索するSQLクエリ?

    4. トランザクション内のエラーを無視するようにPostgresqlに依頼できますか