このドキュメントでは、次のトピックについて説明します。
Adabas は、現在ラテンアルファベットに基づいた文字セット以外の文字セットを使用することが可能で、正しい照合順序でこれらの文字セットを使用するデータを検索することができます。
たいていの場合、アジアのテキスト文字は、単一バイトを使用してエンコードすることはできません。例えば、10,000 文字以上の日本語セットは、1 文字あたりに 2 バイト以上を使用してエンコードされます。大部分の西洋言語の特徴である 1 バイト文字セット(SBCS)に対して、これらは、要求されるエンコードに応じて、2 バイト文字セット(DBCS)またはマルチバイト文字セット(MBCS)と呼ばれます。
Unicode 規格では、Unicode コンソーシアムによってこれらの文字セットが標準化されています。詳細については、Unicode ホームページ(http://www.unicode.org/)を参照してください。DBCS の例は、UCS-2(Unicode バージョン 1.1 のすべての文字を含んでいる)であり、MBCS の例は、UTF-8(1~4 文字で現在の Unicode バージョンのすべての文字を表している)です。
下図では、日本語ひらがな(最初の 2 つ)および漢字(次の 2 つ)の文字を、さまざまなエンコードで示します。
注意:
Adabas の以前のバージョンでは、英数字フィールドに DBCS エンコードデータを格納しましたが、Adabas は、文字セットを認識していませんでした。アプリケーションは、どの文字セットが使われたかを認識する必要があり、それらが別の文字セットのデータを必要とした場合には、変換についての責任はアプリケーション自身にありました。これは、当然、まだ Adabas バージョン 5 でも考えられることですが、現在では、ワイド文字または Unicode(W)フィールドフォーマットの導入によってさらに適切に DBCS と MBCS を適応させています。
新しいフィールドフォーマット W は、2 バイト文字と複数バイト文字を扱うために作成されました。英数字フィールドのようなバイト単位の W フォーマットフィールドのサイズは、FDT に定義された標準長または可変長のどちらかです。W フォーマットフィールドは NV オプションを除いて英数字フィールドと同じフィールドオプションを指定することができます。
W フォーマットフィールドは、スーパーディスクリプタとサブディスクリプタの親として定義することができます。しかし、ハイパーディスクリプタまたはフォネティックディスクリプタの親として定義することはできません。
スーパーディスクリプタがワイド文字(W)フィールドを含んでいる場合、スーパーディスクリプタのフォーマットは A になります。
ワイド文字フォーマットフィールドのすべてのデータは、内部的に UTF-8 で格納されますが、Adabas ユーザーは、OP コマンドのレコードバッファ、または圧縮/圧縮解除ユーティリティ ADACMP/ADADCU でユーザーセッションの外部エンコードを指定することができます。
注意:
テキストフィールドの場合、照合順序がバイト順に従うケースはほとんどありません。必要な照合順序は言語に依存し、例えば、スペイン語の "LL" は、他の言語と異なり、1 文字とみなされます。また、同じ言語でも、さまざまな照合が存在する可能性があります。例えば、電話帳と本の索引では照合が異なる可能性があります。大文字/小文字、言葉に含まれるハイフン(例えば、"coop" と "co-op")、付加記号(例えば、ウムラウト記号、"resume" に対する "résumé" のようなアクセント記号)は、順序付けに影響することも、無視されることもあります。
各照合のための順序付けの規則は、各テキストフィールドの値に応じた照合キーを生成するルーチンに実装されます。これを行うために、Adabas は ICU を使用します。
照合ディスクリプタは、Unicode フィールドの照合に ICU 照合キーを使用するディスクリプタです。ICU 照合キーは、Unicode 照合アルゴリズムと言語特有のルールに従って、変換前の文字列から生成されたバイナリ文字列です。この方法で文字列から生成された照合キー同士をバイナリとして比較する場合、お使いの環境に応じた文字列の比較になります。
ユニバーサルエンコーディングサポート(UES)は、Adabas が、ICU によってサポートされるエンコードに従ってテキストデータを処理し、このエンコードに従ってテキストデータを返すことを可能にします。Adabas の以前バージョンでは、1 つの固定変換テーブルを持つ各種マシンアーキテクチャ(ASCII、EBCDIC)間で Adabas バッファのデータを変換することだけが可能でした。複数の ASCII と 1 つの EBCDIC 派生文字セットの間で変換することはできませんでした。