nchar2/nvarchar2のカラムに文字化けせずに文字列を格納する方法
JPA(EclipseLink)を使って開発しています。
DBはSQLServer, Oracle, PostgreSQLの3種対応です。
APサーバはWildfly10を使っています。
【問題】
現在はOracleで開発&テストしているのですが、nvarchar2型のカラムに対して、サロゲートペアの漢字やベトナム語のような特殊な文字をアプリケーションから保存すると、"?"となってしまいます。
【確認したこと】
- Eclipseのデバッガで、ステップ実行及び変数ウォッチにて、画面からJavaコードには正しい文字が渡っていることを確認済み
- Oracle SQL Developerにて、INSERT/UPDATE文を手書きで流す場合、文字列にNプレフィクスをきちんとつければ、正しい文字が格納されることを確認済み(SELECTして取得できることを確認)
- 実装を全く変えずに、SQL Serverに繋ぐ(Wildflyのデータソース接続先を変更しただけ)場合は、文字化けしないことを確認済み
- SQL Server Management Studioにて、INSERT/UPDATE文を手書きで流す場合、文字列にNプレフィクスを付ければ、正しい文字列が格納されることを確認済み(Nプレフィクス無しだと、文字化けする)
- SQLServerのプロファイラで発行されているSQL文を見ると、EclipseLinkからは全ての文字列にNプレフィクスが付けられている(charでもvarcharでもnvarcharでも関係なし)。
Oracleのプロファイラの確認がすぐにできないのですが、もしかしてOracleとの違いは、「常にNプレフィクスが付けられているかどうか」でしょうか。
ojdbcの問題?
それともEclipseLink側で何か設定が必要?