2012-04-02 5 views
1

キャラクタ・セットがutf8としてOracle 11Gを使用しています。私はそれに日本語と中国語の文字を持っているテーブルがあります。JDBCのキャラクタ・セット

単純なJDBCプログラムを使用してデータベースにクエリを実行すると、出力として疑問符が表示されます。

私はそれを手伝ってもらえますか?

+2

どのように出力を見ていますか?疑わしいときは、出力の各文字を整数として記録し、次にUnicodeコードチャートと比較してください。 –

+0

DBから取り出された文字列をchar配列に変換し、以下の関数を使って各文字の数値を取得しました。 Character.getNumericValue(char); すべての文字の数値として-1が取得されています。すべての文字は疑問符だけです。 – Suresh

+0

それはあなたがそれらを手に入れるべきではありません - それはそれらを数字として扱うことを試みています。 'charAt'を使い、intにキャストしてください。 –

答えて

0

OK、あなたはUTF8

SELECT value 
    FROM v$nls_parameters 
WHERE parameter = 'NLS_CHARACTERSET' 

戻っていることを言っているので?これは特に11gで特に珍しいことです。より新しいバージョンのUnicode標準であるAL32UTF8の値を見るほうがずっと一般的です。

実際にデータベースに格納されているデータを見るとどうなりますか? JDBCを介してデータベースに対して直接実行している同じクエリを実行しても、列を選択するだけでなくDUMP関数を呼び出すと、出力はどのようになりますか?

SELECT DUMP(column_name, 1016) 
    FROM table_name 
WHERE some_key = some_value 

シン・Oracle JDBCドライバを使用していますか?または、OCI JDBCドライバを使用していますか?または、タグとしてOracle ODBCドライバとJDBC-ODBCブリッジを使用していますか?後者は非常に珍しいでしょう。データベースプラットフォームがネイティブJDBCドライバを提供する場合、JDBC-ODBCブリッジドライバを使用する理由はまったくありません。

NLS_LANGはクライアントに設定されていますか?

+0

ジャスティンの洞窟、UTF8のみです。 AL32UTF8ではありません。 2番目のクエリでは、Typ = 1 Len = 26 CharacterSet = UTF8:6d、43,49,43,4f、e6,97、a5、e6,9c、ac、e3,81、b8、e3,82,88を返します。 、e3,81,86、e3,81,93、e3,81,9d。私は薄いオラクルドライバを使用しています – Suresh

+0

@ user1029292 - OK。そしてそれは文字列 "mCICO"の後に7個の3バイト文字が続いていると思われます。これは、データが正しく格納されていることを意味します。どのOracleドライバを使用していますか?シンJDBCドライバですか? OCI JDBCドライバ? ODBC = ODBCブリッジを持つODBCドライバ?他に何か? –

+0

そのシンJDBCドライバ。それは私が今使っているものです。 – Suresh

0

問題が解決されました Eclipse>環境設定>ワークスペース> UTF-8へのテキストファイルのエンコーディング ありがとうございました。

関連する問題