2012-02-22 4 views
2

入出力パラメータSTRUCTを持つJDBCTemplateを使用してOracleストアドプロシージャを呼び出します。この構造体のフィールドの1つは、ストアド・プロシージャ・ロジックに応じて更新されるVARCHARです。しかし、これが呼び出しから返されるときには、3つの疑問符( '???')だけが含まれます。これは恐らくRiddlerの仕事ですが、文字エンコーディングの問題のように聞こえます。私たちは、これが行うことによって取得されたWE8ISO8859P15(ISO8859)の文字エンコーディングを持っていたデータベースにデータベースを切り替えるまで JDBCコールでOracleに3つの疑問符が返される

は、これがうまく働いた:

SELECT NLS_CHARACTERSET FROM NLS_DATABASE_PARAMETERS 

以前働い文字セットだったWE8MSWIN1252(MSWIN-1252)を正常に動作します。だから私はそれが文字セットの問題になっていると推測していますが、返されるテキストの量にかかわらず、常に3つの疑問符を返すので、私は少し慎重です。

基本的なJDBCドライバ(jdbc:oracle:thin)はすべての文字エンコーディングを自動的に行い、データベースのcharsetをUTF-16(Java charエンコーディング)に変換しますが、これは起こっていないようです。私はStoredProcedureを呼び出すためにStoredProcedureクラス(Springの一部)を使用しています。

また、orai18n.jarをクラスパスに追加しようとしましたが、成功しませんでした。しかし、ISO-8859がかなり標準的な文字セットであることを考えると、これは本当に珍しいようです。

ご協力いただければ幸いです。

+0

検索されるデータは、ISO-8859-15文字セットの一部である文字で構成されていますか?データにISO-8859-15に存在しないWindows-1252文字(Microsoftのスマート引用符など)が含まれている可能性はありますか? –

+0

助けてくれてありがとう、文字列の唯一の珍しい文字はティルダ(〜)ですが、これはWindows-1252とISO-8859の両方の文字セットにあります。 MSのスマートな見積もりをまったく使用しないと思うので、それを排除することができます。 –

+2

orai18n.jarをCPに追加すると、 "???" – JIV

答えて

4

これは、データベース文字エンコーディングがISO-8859- として保存されているため、charエンコーディングの問題でした。この標準のバージョン15は、基本的にユーロ記号の追加です。 JDBCを介して接続するために使用していたoracleドライバは、単にISO-8859-15からJavaのUTF-16への変換を実行できませんでした。

ISO-8859-1に戻すか、データベースでUTF-8エンコーディングに変更すると、より良い結果が得られます。 orai18n jarをクラスパスに追加するとこの問題を解決できる可能性がありますが、これにはOSGIバンドルがないため、簡単に実行できませんでした。私の推奨は、Oracleデータベースをまったく気にしないことです。

+1

同じ問題があり、orai18n jarを追加すると問題が解決しました! – tom

+0

JBoss(Wildfly)では、ora18n.jarをサーバーモジュールjboss-wildfly-8.1.0 \ modules \ com \ oracle \ ojdbc6 \ mainに追加する必要がありました。 これを忘れないでください。 – mvermand

関連する問題