JDBC 経由で UTF-8 を MySQL に挿入しようとすると、「文字列値が正しくありません」と表示されます。質問する

JDBC 経由で UTF-8 を MySQL に挿入しようとすると、「文字列値が正しくありません」と表示されます。質問する

私の接続は次のように設定されています:
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 では、utf8UTF-8 で 3 バイトで表現できる Unicode 文字のみが許可されます。ここでは 4 バイトを必要とする文字があります: \xF0\x90\x8D\x83 (U+10343 ゴシック文字サウイル)。

MySQL 5.5以降を使用している場合は、列のエンコーディングをからに変更できますutf8utf8mb4このエンコーディングでは、UTF-8 で 4 バイトを占める文字を保存できます。

MySQL設定ファイルでサーバプロパティcharacter_set_serverを に設定する必要があるかもしれません。utf8mb4Connector/Jはデフォルトで3バイトのUnicodeを使用します。:

たとえば、Connector/J で 4 バイトの UTF-8 文字セットを使用するには、MySQL サーバーを で構成しcharacter_set_server=utf8mb4characterEncodingConnector/J 接続文字列から を除外します。Connector/J は UTF-8 設定を自動検出します。

おすすめ記事