キャラクタ・セットがutf8としてOracle 11Gを使用しています。私はそれに日本語と中国語の文字を持っているテーブルがあります。JDBCのキャラクタ・セット
単純なJDBCプログラムを使用してデータベースにクエリを実行すると、出力として疑問符が表示されます。
私はそれを手伝ってもらえますか?
キャラクタ・セットがutf8としてOracle 11Gを使用しています。私はそれに日本語と中国語の文字を持っているテーブルがあります。JDBCのキャラクタ・セット
単純なJDBCプログラムを使用してデータベースにクエリを実行すると、出力として疑問符が表示されます。
私はそれを手伝ってもらえますか?
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
はクライアントに設定されていますか?
ジャスティンの洞窟、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
@ user1029292 - OK。そしてそれは文字列 "mCICO"の後に7個の3バイト文字が続いていると思われます。これは、データが正しく格納されていることを意味します。どのOracleドライバを使用していますか?シンJDBCドライバですか? OCI JDBCドライバ? ODBC = ODBCブリッジを持つODBCドライバ?他に何か? –
そのシンJDBCドライバ。それは私が今使っているものです。 – Suresh
問題が解決されました Eclipse>環境設定>ワークスペース> UTF-8へのテキストファイルのエンコーディング ありがとうございました。
どのように出力を見ていますか?疑わしいときは、出力の各文字を整数として記録し、次にUnicodeコードチャートと比較してください。 –
DBから取り出された文字列をchar配列に変換し、以下の関数を使って各文字の数値を取得しました。 Character.getNumericValue(char); すべての文字の数値として-1が取得されています。すべての文字は疑問符だけです。 – Suresh
それはあなたがそれらを手に入れるべきではありません - それはそれらを数字として扱うことを試みています。 'charAt'を使い、intにキャストしてください。 –