jdbc接続に正しいqueryStringパラメーターを使用していると思います
jdbc:mysql://localhost:3306/databasename?useUnicode=true&characterEncoding=utf8&noAccessToProcedureBodies=true
私のデータベースは、utf-8 (デフォルトの文字変数) をサポートするように正しく設定されています。
character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
私の sproc は、必要に応じて各パラメーターを utf8 として定義します
IN _shortDesc MEDIUMTEXT character set utf8,
MySQLWorkbench を介して sproc を呼び出すと、期待どおりに機能します。ただし、Java から呼び出すと例外が発生します。
java.sql.SQLException: Incorrect string value: '\xAC\xED\x00\x05t\x00...' for column '_shortDesc'
興味深いことに、関連するフィールドの sproc 定義をutf16
またはに変更するucs2
と、例外ではなく、テーブル内の間違った韓国語文字が表示されます。
JavaでSQLパラメータを構築するときに、バイト配列を使用してみました
getBytes(Charset.forName("UTF-8"))
ただし、例外は引き続きスローされます。
ストアド プロシージャを介して CJK 文字を Java から MySQL に正しく渡すためにこれを設定する正しい方法は何ですか?
EDIT 私は春のフレームワークからSimpleJdbcCallを使用しています
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://server/test?characterEncoding=utf8");
ds.setUsername("user");
ds.setPassword("pass");
// must explicitly declare params
SimpleJdbcCall jdbc = new SimpleJdbcCall(ds)
.withProcedureName("sp_gms_addGameTranslationsTest");
SqlParameterSource in = new MapSqlParameterSource()
.addValue("_test", "그러나 사디라");
jdbc.execute(in);