私の接続は次のように設定されています:
Connection conn = DriverManager.getConnection(url + dbName + "?useUnicode=true&characterEncoding=utf-8", userName, password);
テーブルに行を追加しようとすると、次のエラーが発生します。
Incorrect string value: '\xF0\x90\x8D\x83\xF0\x90...' for column 'content' at row 1
何千ものレコードを挿入していますが、テキストに \xF0 が含まれていると常にこのエラーが発生します (つまり、不正な文字列値が常に \xF0 で始まります)。
列の照合は utf8_general_ci です。
何が問題なのでしょうか?
ベストアンサー1
MySQL では、utf8
UTF-8 で 3 バイトで表現できる Unicode 文字のみが許可されます。ここでは 4 バイトを必要とする文字があります: \xF0\x90\x8D\x83 (U+10343 ゴシック文字サウイル)。
MySQL 5.5以降を使用している場合は、列のエンコーディングをからに変更できますutf8
。utf8mb4
このエンコーディングでは、UTF-8 で 4 バイトを占める文字を保存できます。
MySQL設定ファイルでサーバプロパティcharacter_set_server
を に設定する必要があるかもしれません。utf8mb4
Connector/Jはデフォルトで3バイトのUnicodeを使用します。:
たとえば、Connector/J で 4 バイトの UTF-8 文字セットを使用するには、MySQL サーバーを で構成し
character_set_server=utf8mb4
、characterEncoding
Connector/J 接続文字列から を除外します。Connector/J は UTF-8 設定を自動検出します。