Unicode データの使用

Unicode 仕様では、世界中のビジネス界で広く使用されている大半の文字について、単一のエンコード体系が定められています。すべてのコンピュータでは、一貫してこの Unicode 仕様を使用して Unicode データのビット パターンが文字に変換されます。このため、同じビット パターンはどのコンピュータでも必ず同じ文字に変換されます。受信側のシステムでビット パターンが正しく文字に変換されるかどうかを気にせず、データベース間またはコンピュータ間でデータを自由に転送できます。

1 文字を 1 バイトでエンコードするデータ型の場合、256 個の文字しか表せないという問題があります。このため、アルファベットに応じた複数のエンコード仕様 (コード ページ) を作成する必要があります。欧米文字などは比較的小さな仕様で済みますが、日本語の漢字や韓国語のハングル文字など数千もの文字がある言語を処理するのは不可能です。

Microsoft SQL Server の各照合順序にはコード ページがあり、char 型、varchar 型、text 型の値で、どのビット パターンがどの文字を表すかを定義しています。個別の列や文字定数を異なるコード ページに割り当てることができます。クライアント コンピュータでは、オペレーティング システムのロケールに関連するコード ページを使用して、文字のビット パターンが解釈されます。さまざまなコード ページがあり、同じ文字でも、コード ページによっては定義されていることもあれば、定義されていないこともあります。あるコード ページのあるビット パターンで定義されている一部の文字が、他のコード ページでは別のビット パターンで定義されていることもあります。各種の言語を処理する必要がある国際化対応システムを作成する場合、複数の国や地域の言語要件を満たす、すべてのコンピュータに適したコード ページを選ぶのは困難です。また、異種コード ページを使用するシステムと接続した場合に、すべてのコンピュータで正しい文字に変換されるように保証するのも困難です。

Unicode 仕様は 2 バイトを使用して 1 つの文字をエンコードすることでこの問題を解決しました。2 バイトには 65,536 個のパターンがあるため、ビジネスで一般的に使用される言語のほとんどを 1 つの仕様で表現できます。Unicode システムは一貫して同じビット パターンを使用してすべての文字を表すため、システム間を移動したときに文字が誤って変換されるという問題は起こりません。システム全体で Unicode 型を使用することで、文字変換から生じる問題を最低限に抑えることができます。

SQL Server では次のデータ型が Unicode データをサポートします。

  • nchar

  • nvarchar

  • ntext

    注意

    これらのデータ型のプレフィックス n は、National (Unicode) データ型に関する ISO 標準に由来しています。

次の点を除き、nchar、nvarchar、ntext は、それぞれ char、varchar、text と同じです。

  • Unicode の方が広範な文字をサポートします。

  • Unicode 文字の方が格納に多くの記憶域を必要とします。

  • char 型列と varchar 型列の最大サイズは 8,000 文字であるのに対し、nchar 型列の最大サイズは 4,000 文字です。

  • nvarchar 型列の最大サイズは、2^31 バイトで、max 指定子を使用して指定します。nvarchar(max) の詳細については、「大きな値のデータ型の使用」を参照してください。

  • Unicode 定数は先頭に N を付けて指定します。つまり、「N'Unicode 文字列'」と指定します。

  • Unicode データは Unicode 標準により規定された文字セットを使用します。Unicode 列に使われる Unicode 照合順序は、大文字と小文字の区別、アクセントの区別、かなの区別、文字幅の区別、バイナリなどの属性を基に指定されます。