Troubleshooting
Problem
データベース・アプリケーションで全角ダッシュ (ー) や波ダッシュ (~) が文字化けすることがあります。
これは、シフト JIS (943)、日本語 EUC (954)、日本語 EBCDIC (5026/5035, 930/939, 1390/1399) から Unicode (1200/1208) への変換で一部の文字 (全角ダッシュ、波ダッシュ、二重縦線、負記号、破線) に複数の変換ルールがあるためです。
また、Unicode からシフト JIS への変換でも一部の文字 (ローマ数字、括弧株、ナンバー記号、電話記号) に複数の変換ルールがあるため、これらは文字化けすることがあります。
注:943 などの数字は IBM が文字コードを識別する CCSID です。
Symptom
Problem (問題) にあげた文字がアプリケーションで文字化けしたり、同じ字形のはずが異なるコード・ポイントに格納されることがあります。
Environment
Unicode とシフト JIS または 本語 EUC、日本語 EBCDIC との変換が発生するすべてのシステム
かつ、文字データとして Problem (問題) でリストした文字を使用しているシステム
Resolving The Problem
この問題に対する抜本的な解決策は、文字コードの変換が発生しないようデータベースやアプリケーションで使用するコードの統一です。または Problem (問題) で列挙されたような文字を使用しないことでも問題を抑制できます。
アプリケーションが Microsoft Windows で採用された変換ルールを期待している場合、対症療法として Microsoft の変換ルールを使用して問題を軽減できる可能性があります。ただし、この場合はすべての変換が Microsoft の変換ルールで行われることを保証したり、既存のデータの入れ換えが必要になる可能性に注意が必要です。
■ Db2 エンジンおよび non-Java アプリケーションでの代替 Unicode 変換表の使用
Db2 は代替 Unicode 変換表を使用することで、デフォルトと異なる変換ルールを実装できます。
データベース・サーバーだけでなく、該当サーバーにアクセスするすべてのクライアントでも同様の手順で代替 Unicode 変換表を使用する必要がある点に注意してください。
データベース・サーバーだけでなく、該当サーバーにアクセスするすべてのクライアントでも同様の手順で代替 Unicode 変換表を使用する必要がある点に注意してください。
例:Unicode とシフト JIS の変換表を代替 Unicode 変換表に入れ替える
- すべての Db2 アプリケーションと Db2 インスタンスを停止します。
- sqllib/conv/ms ディレクトリーの 0943ucs2.cnv と ucs20943.cnv を sqllib/conv へコピーします。
cp $HOME/sqllib/conv/ms/*0943* $HOME/sqllib/conv
- すべてのアプリケーションを再始動します。
代替 Unicode 変換表の詳細はマニュアルを参照してください。なお、1390/1399 用の代替 Unicode 変換表は Db2 v11.5 以降で使用可能です。
■ Java アプリケーションでの代替 Unicode 変換表の使用
JDBC ドライバー (com.ibm.db2.jcc) は *.cnv のような変換表を使用せず、Java VM が持つコンバーターを利用してコード変換を行います。このため、サーバーで代替 Unicode 変換表を使用した場合でも、サーバーから受信した文字は代替 Unicode 変換表のルールでは変換されず、デフォルトの変換ルールで変換されます。 (JDBC ドライバーが送信した文字は、サーバー上の代替 Unicode 変換表で変換されます)
JDBC アプリケーションで代替 Unicode 変換表を使用するには db2.jcc.ccsid<ccsid>Mapping 構成プロパティを 2 に設定して代替変換表を使用する必要があります。
例:シフト JIS データベース用にシフト JIS の代替 Unicode 変換ルール (MS932) を使用
java -cp <class_path> -Ddb2.jcc.ccsid943Mapping=2 <appl_class_name>
ソース・コード・ページ | 構成プロパティ名 |
---|---|
943 | db2.jcc.ccsid943Mapping |
954 | db2.jcc.ccsid954Mapping |
930 | db2.jcc.ccsid930Mapping |
939 | db2.jcc.ccsid939Mapping |
1390 | db2.jcc.ccsid1390Mapping |
1399 | db2.jcc.ccsid1399Mapping |
注:Java の代替変換ルールは、Cp16684A のような Java の代替変換ルールを持つコンバーターによって提供されるため、IBM Java でのみ使用可能な場合があります。
Document Location
Worldwide
[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PlRAAU","label":"Codepage"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]
Was this topic helpful?
Document Information
Modified date:
15 August 2023
UID
ibm16510042