Windows Server 2013でDB2 v10.5 FP 7を実行していますが、エンコード設定に問題があります。
ウィンドウは、地域設定および入力言語としてドイツ語(スイス)を使用するように設定されています。
_chcp: Active code page: 850
_
私のデータベースはUTF-8に設定されています。db2get cfgからのこの出力を参照してください
_ Datenbankgebiet = CH
Codepage für Datenbank = 1208
Codierter Zeichensatz der Datenbank = UTF-8
Landescode der Datenbank = 41
Sortierfolge der Datenbank = SYSTEM_1252
Alternative Sortierfolge (ALT_COLLATE) =
_
ウムラウト付きのUTF-8文字列はデータベースに正しく格納されます(有効な16進数値を確認することで確認されます)。ただし、取得時には、それらは混同されます:
正しい値は「87100-ÜberbauungHinterroos」です。また、デフォルトのdb2出力が「Sätze」ではなく「Sõtze」として表示されていることに注意してください。
JDBC/Javaを介して同じ行を選択することにより、誤った出力を再現することもできます。
IBM Documentation この動作は、サーバーで明示的に設定されていないDB2CODEPAGEレジストリー変数にリンクされていると述べています。
これを修正する方法はありますか?
EDIT:(@maoからのリクエストに応じて詳細情報):
Windowsのデフォルトコードページも850です。レジストリのコードページは次のとおりです。
私が間違ったリードをフォローしていないことを確認するために、出力されたSELECT HEX(DISPLAY_NAME)...
によってテーブルに保存された文字列を検証しました
_3837313030202D20C39C626572626175756E672048696E746572726F6F73
_
ウムラウト付きの文字は0xC39Cで、これは 大文字のUとダイアレシス です。
IBMとのサポートケースを開いた後、彼らは私に解決策につながる手がかりを与えました:
->まず、コマンドウィンドウのタイトルバーを右クリックして、[プロパティ]をクリックします。
文字の表示にTrueTypeフォントを使用していますか?
結局のところ、font(wtf?)を変更すると、上記の文字の表示が変更されます。
これは、DB2 CLIウィンドウの特定の動作です。TrueType以外のフォントで通常のコマンドを開くと、期待どおりに機能します。
コードページ850は、固定幅のレガシー8ビット文字セットです。多くの場合、コードページ1252がコードページ850に取って代わりました。
次のように850ではなくコードページ1252を試すと、Db2-CLPに違いが生じますか?
db2 connect reset
db2 terminate
chcp 1252
db2 connect to ....
db2 "select ..."
Windowsの「システムデフォルト」コードページは、コードページ850と同じですか。 Windowsの地域設定やレジストリでこれを再確認してください。 Java/jdbcもシステムのデフォルト設定の影響を受けます。
Windows環境変数DB2CODEPAGEを1208に明示的に設定すると役立つ場合がありますが、予期しない結果になる可能性があるため、慎重なテストが必要です。