エンディアン

エンディアン はバイト・オーダーを記述するデータ属性です。 アプリケーションでは、データを交換するときに、マルチバイト・データの配列規則が認識される必要があります。 そうしないと、データの解釈を誤る可能性があります。

データでは、以下のバイト配列フォーマットが可能です。

ビッグ・エンディアン
このフォーマットでは、最上位バイトが最初に格納されます。 その他のバイトは、 重みの降順で続きます。 例えば、4 バイト語の場合、バイト・オーダーは 0、1、2、3 になります。 2 バイト語の場合は、0、1 です。

ビッグエンディアン形式は、 pSeries, IBM® zSystems™、 iSeries, Sun、HPで使用されています。

リトル・エンディアン
このフォーマットでは、最下位バイトが最初に格納されます。 その他のバイトは、 重みの昇順で続きます。 例えば、4 バイト語の場合、バイト・オーダーは 3、2、1、0 となります。 2 バイト語の場合は、1、0 です。

リトルエンディアン形式は、 xSeries を含む Intel ベースのマシンで使用されています。

エンディアンが影響するのはマルチバイト・データのみです。 1 バイト内のビットの順序は常に同じです。 バイト内のビット順序は、常に 7、6、5、4、3、2、1、0 です。

UTF-8 データは、エンディアンの影響を受けません。これは、データが複数バイトとして格納されている場合も同様です。 UTF-16 データおよび UTF-32 データは、 エンディアンの影響を受けます。 例えば、以下の表に示すように、文字「A」は UTF-16 および UTF-32 でエンコードされます。
表 1. 文字「A」のエンコードの例
  UTF-16 UTF-321
ビッグ・エンディアン X'0041' X'00000041'
リトル・エンディアン X'4100' X'41000000'
注:
  1. Db2 for z/OS® は、データを UTF-32 では保管しません。

異なるエンディアン・フォーマットを使用するシステムおよびアプリケーション間でデータを交換するときに、データが適切に変換されないと、エンディアンが問題になる可能性があります。 システムまたは アプリケーションで処理するデータのエンディアン・フォーマットに注意してください。 トレース内の文字エンコード値を調べた際に、エンディアンの問題に気付くことが あります。 数値のバイト値が入れ替わっていることに気付くような場合に、 そのような問題が存在しています。 例えば、X'0041' を予期している 場合に表示は X'4100' になっています。

.NET アプリケーションから UTF-16 リトル・エンディアン・フォーマット (CCSID 1202) のデータをロードすることを想定します。 Db2 for z/OS CCSID 1202 でのデータ保存には対応していません。 ただし、Db2 は CCSID 1202 との間の変換をサポートしています。 したがって、Db2 はデータを変換し、UTF-16 ビッグ・エンディアン形式 (CCSID 1200) で保管します。 この場合は、データ・フォーマットが変更されたことに注意する必要があります。