Unicode データと複数の CCSID を使用したアプリケーション・プログラミング

アプリケーションが、Unicode データまたは異なるエンコード・スキームのデータを処理する場合は、Db2 でのいくつかのプログラミング手法と推奨事項に注意する必要があります。

Db2 は、常にアプリケーションがデータに使用する CCSID で、データをアプリケーションに返します。 この CCSID はアプリケーション・コード化スキーム と呼ばれます。

ヒント: アプリケーションプログラムの作成と準備の際には、以下の一般的な推奨事項をご参照ください。
  • 可能な場合、Unicode または EBCDIC データのいずれかを使用してください (両方ではありません)。 複数のコード化スキームを使用する場合は、データ損失とパフォーマンスに及ぶ可能性がある次の影響を考慮してください。
    • アプリケーションでの複数 CCSID 管理は難しいことがあります。 データ損失が発生しないようにするには、データの移動経路、つまり複数のモジュールが含まれる可能性のあるパスを管理する必要があります。
    • CICS® Transaction Gateway や IBM® MQ など、多くの環境はメッセージベースです。 この場合、メッセージ全体のコード化スキームが 1 つである必要があります。 メッセージ全体のエンコードが 1 つであるため、一部のデータを EBCDIC でアプリケーションに送信し、別のデータを Unicode でアプリケーションに送信する操作は適切ではありません。 メッセージを送信する直前に、すべてのデータを 1 つのエンコード (Unicode など) に変換する必要があります。
    • Db2 表は、同じエンコード・スキーム内になければなりません。 一部の列のコード化スキームを Unicode にし、別の列のコード化スキームを EBCDIC にすることはできません。 Unicode の列と EBCDIC の列がアプリケーションで処理される場合、文字変換が実行されますが、これによりパフォーマンス・オーバーヘッドが増加する可能性があります。
  • COBOL または PL/I アプリケーションで Unicode データを使用する場合は、コプロセッサーを使用してください。
  • COBOL、PL/I、C/C++、またはアセンブラー・アプリケーションで Unicode データを処理する場合は、アプリケーションのソース・コードにリテラルを使用しないでください。 これらの言語コンパイラーでは Unicode ソース・コードがサポートされていないため、このようなリテラル値が誤って解釈される可能性があります。 代わりに、これらのリテラル値を、プログラムの開始時にアクセス可能なファイルまたは Db2 表に入れて、値をロードしてください。 (ファイルとホスト変数は、アプリケーション・ソース・コードとしてプリコンパイルおよびコンパイルされません。)
  • データで 拡張変換または収縮変換が発生する場合は、データの長さが 変化することがあります。 変換後のストリングに対して LENGTH 関数、CHARACTER_LENGTH 関数、SUBSTRING 関数、または SUBSTR 関数を使用するときは、この長さの変化に注意してください。 CHARACTER_LENGTH および SUBSTRING の場合は、CODEUNITS16 と CODEUNITS32 オプションを使用して、Db2 による長さの計算方法を指定します。
  • 複数の Latin 文字セット (Latin-1 や Latin-4 など) の文字を表現する必要がある場合は、アプリケーション・コード化スキームに Unicode を使用することを検討してください。 SBCS CCSID には、2 つの文字セットの組み合わせで必要となるすべての文字を表現するための十分なコード・ポイントがありません。 例えば、アプリケーションが EBCDIC CCSID (277 または 1069 など) を使用しているとします。 この場合、一部のデータが Unicode 形式でデータベース内に存在する場合がありますが、置換を行わない限り、これらのデータをアプリケーションで取得することはできません。 アプリケーションで言語を 1 つずつ処理する必要がある場合は、次のいずれかの方法でインフラストラクチャーをセットアップします。
    • CCSID 277 を使用するアプリケーションのバージョンと、CCSID 1069 を使用するバージョンを用意します。 また、対応する 2 つのサブシステム (CCSID 277 を使用するサブシステムと CCSID 1069 を使用するサブシステム) を用意します。 (1つの Db2 サブシステムに複数の EBCDIC CCSID を使用することはできません。)
    • データを Unicode で格納し、CCSID 277 を使用するアプリケーションのバージョンと、CCSID 1069 を使用するバージョンを用意します。 次に、これらのアプリケーションを、それぞれ異なる ENCODING バインド・オプション値にバインドします。
    • データを Unicode で格納し、EBCDIC CCSID を使用するアプリケーションのバージョンと、Unicode を使用するバージョンを用意します。
    ただし、1 つのバージョンのアプリケーションで、Latin-1 と Latin-4 の両方の文字セットを処理する必要がある場合、アプリケーションではデータを Unicode で処理する必要があります。