JDBCドライバへの文字コード設定について
JDBCドライバの文字コード設定について教えてください。
JavaでJDBCドライバを使用して、OracelDBへ接続するシステムがあります。
JDBCドライバのOracle接続用インスタンスには通常文字コードを設定すると思います。(推奨されているはず)
// 接続文字列 例
String url = "jdbc:oracle:thin:@localhost:1521:ORCL?useUnicode=true&characterEncoding=MS932";
上記の例では、「characterEncoding=MS932"」を設定していますが、設定しなかった場合どのような挙動になりますでしょうか?
一旦私の理解でいうと、文字コードが設定されていない場合、JDBCドライバは自動でJVMの文字コードを使用するかと思いましたが、システム上でサンプルコードを入れて確認してみると、思っていた結果にはならなかったです。
System.out.println("file.encoding : " + System.getProperty("file.encoding"));
System.out.println("sun.jnu.encoding : " + System.getProperty("sun.jnu.encoding"));
Charset defaultCharset = Charset.defaultCharset();
System.out.println("Default Charset : " + defaultCharset);
//SQL実行
ResultSet resultSet = select(sqlBuffer,parameters);
//結果取得
System.out.println("Shift-Jis : " + new String(resultSet.getBytes("TEST_NAME"),"Shift-Jis"));
System.out.println("MS932 : " + new String(resultSet.getBytes("TEST_NAME"),"MS932"));
System.out.println("windows-31j : " + new String(resultSet.getBytes("TEST_NAME"),"windows-31j"));
System.out.println("UTF-8 : " + new String(resultSet.getBytes("TEST_NAME"),"UTF-8"));
System.out.println("UTF-16 : " + new String(resultSet.getBytes("TEST_NAME"),"UTF-16"));
上記を実行した場合、
JVMは文字コードMS932を認識しており、
file.encoding : MS932
sun.jnu.encoding : MS932
Default Charset : windows-31j
デコードの結果はUTF-8以外は文字化けしていました。
Shift-Jis : 蝗エ蝗蜃オ蝗
MS932 : 蝗エ蝗蜃オ蝗
windows-31j : 蝗エ蝗蜃オ蝗
UTF-8 : 文字化けなし
UTF-16 : ・???蝗???
MS932が文字化けせず、他が文字化けするかと思っていましたが、理解が間違ってますでしょうか?
0