COBOL アプリケーションでの Unicode データの処理

COBOL では UTF-16 データがサポートされています。COBOL では UTF-8 データはサポートされません。

このタスクについて

ただし DB2® for z/OS® では、UTF-8 データと UTF-16 データの両方がサポートされます。

手順

DB2 for z/OS の COBOL アプリケーションで Unicode データを処理するには、次の推奨処置を実行します。

  • Unicode データには、NATIONAL データ・タイプの 1 つを使用します。例えば、Unicode 文字データに COBOL PIC N(n) USAGE NATIONAL データ・タイプを使用します。これらのデータ・タイプは UTF-16 であり、COBOL で Unicode データをサポートできるようになります。

    COBOL にはネイティブ UTF-8 データ・タイプはありませんが、COBOL アプリケーションを使用して DB2 から UTF-8 データを取得できます。DB2 は、出力をアプリケーションに必要なフォーマットに変換します。例えば、DB2 カタログを照会すると、DB2 により COBOL アプリケーションのデータが UTF-8 から UTF-16 (PIC N USAGE NATIONAL 変数) または EBCDIC (PIC X 変数) に変換されます。ただし、未変換の UTF-8 データを COBOL 変数に格納しないでください。例えば、PIC X 変数に UTF-8 データを格納すると、COBOL では、このデータが EBCDIC であり、データが破損している可能性があると判別されます。この UTF-8 値を変数間で移動するというような単純な動作でも、データが破損するおそれがあります。これは、COBOL では、変数の埋め込みに UTF-8 の X'20' ではなく EBCDIC の X'40' が使用されるためです。

  • データを UTF-16 で DB2 に格納します。この形式では、多くの場合、UTF-8 よりも多くのスペースが必要になります。ただし、処理時に CPU が節約されます。これは、DB2 と COBOL の両方が UTF-16 データを使用し、変換が必要ないためです。
  • DB2 コプロセッサーを使用してアプリケーションを準備します。
  • アプリケーションの CCSID の指定の指示に従い、COBOL アプリケーション・ソースおよびデータに適切な CCSID を指定します。
    推奨事項: データの CCSID を指定するときに、ENCODING バインド・オプションを使用します。このオプションを使用すると最良のパフォーマンスを実現できます。ただし、状況によっては、その他のアプリケーションの CCSID の指定オプションを検討することがあります。
  • プログラムで PIC X 変数が使用されており、COBOL コンパイラー・オプション NOSQLCCSID が指定される場合、バインド・オプションとして ENCODING UNICODE を指定しないでください。 この状況で ENCODING UNICODE を指定すると、DB2 はこれらの文字変数を UTF-8 として解釈しますが、COBOL では UTF-8 はサポートされていません。したがって DB2 でデータが誤って解釈される可能性があります。