42429
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側で何か設定が必要？
CC BY-SA 3.0
2017-12-08T07:49:50.700
40133
2018-03-16T05:11:41.880
2018-03-09T00:40:45.267
8078
8078
question
java oracle jpa
nchar2/nvarchar2のカラムに文字化けせずに文字列を格納する方法
<https://docs.oracle.com/cd/E11882_01/appdev.112/e13995/oracle/jdbc/OracleDriver.html>

こちらにある defaultNChar の値をtureに設定すれば解決するとおもいます。
CC BY-SA 3.0
2018-03-16T05:11:41.880
42429
2018-03-16T05:11:41.880
24823
40133
answer