IBM Support

[Db2] 全角ダッシュや波ダッシュなどが文字化けする原因と対処方法

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 とシフト JIS の変換表を代替 Unicode 変換表に入れ替える
  1. すべての Db2 アプリケーションと Db2 インスタンスを停止します。
  2. sqllib/conv/ms ディレクトリーの 0943ucs2.cnv と ucs20943.cnv を sqllib/conv へコピーします。
    cp $HOME/sqllib/conv/ms/*0943* $HOME/sqllib/conv
  3. すべてのアプリケーションを再始動します。
代替 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 でのみ使用可能な場合があります。
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート

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"}]

Document Information

Modified date:
15 August 2023

UID

ibm16510042