構成のあるmysqlサーバー8.0.21があります
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
そして、文字セットが utf8mb4 のテーブル
CREATE TABLE `test` (`c0` TEXT) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
このコードは mysql-connector-java 5.1.18 で動作しています
Connection conn = DriverManager.getConnection("jdbc:mysql://hostxxxx/test?" +
"user=userxxx&password=passxxx");
String sql = "INSERT INTO test(c0) value ('')";
conn.createStatement().execute(sql)
しかし、mysql-connector-java-5.1.44 (またはそれ以上) を使用すると、エラーが発生しますjava.io.IOException: Incorrect string value: '\xF0\x9F\x9A\x98\xF0\x9F...'
character_set_server
サーバー構成をに変更することで、このコードをバージョン 5.1.44++ で動作させることができますutf8mb4
が、下位互換性があるため、変更できませんでした。
このコードが古いバージョン (mysql-connector-java-5.1.18) でどのように機能するかは誰でも知っていますが、バージョン (5.1.44 以降) では機能しません。このエラーに関連するトピックをいくつか見つけましたが、問題を解決できませんでした