プリペアドステートメントを使用して、特定のテーブルのフィールドにロシア語の文字を格納しようとしています。テーブルとフィールドは、utf8文字セットとutf8_bin照合を使用しています。
IDEまたはコマンドラインから手動で挿入を実行すると、文字列は期待どおりに保存されます。
INSERT INTO utf8Table VALUES('Анатолий Солоницын');
その後、そのテーブルをクエリして、期待される文字列を取得することもできます。
接続は、Tomcatのcontext.xmlファイル内のリソースを介して次の構成でセットアップされます。
<Resource
name="jdbc/DoolliDB"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
useUnicode="true"
characterEncoding="UTF8"
....
</Resource>
私が言ったように、私は文字列/文字をうまく読み取ることができるので、テーブルと接続設定の両方が適切に設定されていると思います。
次のようにPreparedStatement/CallableStatementを使用しています。
CallableStatement callableStmt = __mySqlConnector.getConnection().prepareCall("INSERT INTO utf8Table VALUES(?)");
callableStmt.setString(1, "Анатолий Солоницын");
callableStmt.executeUpdate();
АнатолийСолоницынの代わりに、データベースに挿入されるのは次のとおりです。???????? ?????????
また、überなどの「通常の」utf-8文字列が適切に保存されていることにも注意してください。
両方
System.getProperty("file.encoding")
と
java.nio.charset.Charset.defaultCharset().name()
どちらもUTF-8を返しています。
どんな助けでも大歓迎です。ありがとう