エンコーディングと正規化

ASCII 文字は、UTF-32 では 4 バイト、UTF-16 では 2 バイト、UTF-8 では 1 バイトを使用します。 ISO Latin 文字セットの各種の非 ASCII 文字は、これらのエンコーディングで 4 バイト、2 バイト、2 バイトを使用します。 しかし、一般的な漢字は、UTF-8では3バイト、UTF-16では2バイト(正確には16ビット)を使用する。 まれな漢字の中には、UTF-16でも UTF-8でも4バイトを要するものがある。

Unicode では、同じ文字を複数の方法でエンコードすることを許容しています。 例えば、文字 À は、Unicode の 1 文字「重アクセント記号付きのラテン大文字 A」で表記することも、「結合される重アクセント記号が後ろに付いたラテン大文字 A」という 2 文字で表記することもできます。 Unicode はこれらの文字を標準等価のシーケンスと定義します。 これらの2つの配列は同一として扱われなければならないため、データベースではこれらの等価配列を許可しない。

そのためNetezza Performance Serverアラビア語、タイ語、ウルドゥー語、ヒンディー語などの言語をサポートできませんNetezza Performance Server nzconvert コマンドの -nfc スイッチを使用すると、UTF-8、UTF-16、または UTF-32 フォーマットの入力を、International Components for Unicode (ICU) ルーチンを利用して Normalization Form C (NFC) フォーマットに変換できます。 Netezza Performance Serverは NFC 形式のデータをロードします。

あいまいさを避けるため、Unicode では Normalization Form C (NFC) と Normalization Form D (NFD) の 2 つの正規化フォームについて定義しています (詳しくは http://www.unicode.org/reports/tr15/ for the specification の『Unicode Standard Annex #15』を参照してください)。 NFD は原則として「常に分解」するのに対し、NFC では「可能な限り合成」します。 リリース 4.0.3 以降、Performance Server は、NFC フォーマットのデータをロードします。

Netezza Performance Serverは、実際にはNFC'と呼ばれるNFCのわずかなスーパーセットをサポートしています。 レガシー文字エンコーディングからの標準変換ではシングルトンになることがあるため、スーパーセットによってNetezza Performance Serverはシングルトン分解文字もサポートできるようになった。 singleton については『Unicode Standard Annex #15』を参照してください。