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