nchar および nvarchar (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

固定サイズ (nchar)、または可変サイズ (nvarchar) の文字データ型です。 SQL Server 2012 (11.x) 以降、補助文字 (SC) が有効になっている照合順序を使用する場合、これらのデータ型には Unicode 文字データの全範囲が格納され、UTF-16 文字エンコードが使用されます。 SC が無効の照合順序を指定する場合、これらのデータ型には UCS-2 文字エンコードでサポートされている文字データのサブセットのみが格納されます。

引数

nchar [ ( n ) ]

固定サイズの文字列データです。 n によってバイト ペアでの文字列のサイズが定義されます。1 から 4,000 までの値にする必要があります。 ストレージのサイズは、n の 2 倍のバイト数です。 UCS-2 エンコードの場合、ストレージのサイズは n の 2 倍のバイト数となり、格納できる文字数もまた n となります。 UTF-16 エンコードの場合、ストレージのサイズは引き続き n の 2 倍のバイト数ですが、補助文字によって 2 つのバイト ペア (またはサロゲート ペア) が使用されるため、格納できる文字数は n よりも少なくなる場合があります。 nchar の ISO シノニムは、national char および national character です。

nvarchar [ ( n | max ) ]

可変サイズの文字列データです。 n によってバイト ペアでの文字列のサイズが定義されます。1 から 4,000 までの値を指定できます。 max は、ストレージの最大サイズが 2^31-1 文字 (2 GB) であることを示します。 ストレージのサイズは、n の 2 倍のバイト数 + 2 バイトです。 UCS-2 エンコードの場合、ストレージのサイズは n の 2 倍のバイト数 + 2 バイトとなり、格納できる文字数もまた n となります。 UTF-16 エンコードの場合、ストレージのサイズは引き続き n の 2 倍のバイト数 + 2 バイトですが、補助文字によって 2 つのバイト ペア (またはサロゲート ペア) が使用されるため、格納できる文字数は n よりも少なくなる場合があります。 ISO シノニム nvarchar は national char のさまざまな 各国語文字がさまざまなです

注釈

よくある誤解は、nchar(n)nvarchar(n) では、n によって文字数が定義されると考えられていることです。 ただし、nchar(n)nvarchar(n) では、n によって文字長がバイトペア (0-4,000) で定義されます。 n は、格納できる文字数を定義しません。 これは、char(n) および varchar(n) の定義に似ています。

この誤解が生じるのは、Unicode の範囲 0 - 65,535 で定義された文字を使用すると、各バイトペアにつき 1 つの文字を格納できるためです。 しかしながら、より高い Unicode の範囲 (65,536 - 1,114,111) の場合、1 つの文字で 2 つのバイトペアが使用されることがあります。 たとえば、nchar(10) として定義された列では、データベース エンジンで格納できる文字は、1 つのバイトペア (Unicode 範囲 0 - 65,535) を使用する文字は 10 文字ですが、2 つのバイトペア (Unicode 範囲 65,536 - 1,114,111) を使用する場合は 10 文字未満です。 Unicode の格納と文字の範囲の詳細については、「UTF-8 と UTF-16 でのストレージの相違点」を参照してください。

データ定義または変数宣言ステートメントで n を指定しないと、既定の長さは 1 になります。 CAST 関数で n を指定しないと、既定の長さは 30 になります。

nchar または nvarchar を使用する場合は、次のことをお勧めします。

  • 列データ エントリのサイズが一定の場合は、nchar を使用します。
  • 列データ エントリのサイズが大幅に変化する場合は、nvarchar を使用します。
  • 列データ エントリのサイズが大幅に変化し、かつ文字列の長さが 4,000 バイト ペアを超える可能性がある場合は、nvarchar(max) を使用します。

sysname は、null 値を許可しないという点を除き、機能上は nvarchar(128) と同じ、システムから提供されているユーザー定義データ型です。 sysname データベース オブジェクト名を参照するために使用します。

COLLATE 句を使用して特定の照合順序を指定しない限り、nchar または nvarchar を使用するオブジェクトには、データベースの既定の照合順序が割り当てられます。

SET ANSI_PADDING は、ncharnvarchar に対して常に ON です。 SET ANSI_PADDING OFF は、nchar または nvarchar データ型には適用されません。

Unicode 文字の文字列定数には、プレフィックスとして文字 N を付けて UCS-2 または UTF-16 の入力を通知します。これは SC 照合順序が使用されているか使用されていないかによって異なります。 プレフィックス N がない場合、文字列はデータベースの既定のコード ページに変換され、特定の文字が認識されない場合があります。 SQL Server 2019 (15.x) 以降では、UTF-8 が有効になっている照合順序を使用すると、既定のコード ページで Unicode UTF-8 文字セットを格納できます。

文字列定数にプレフィックスとして文字 N を付けたときに、変換する定数の長さが nvarchar 文字列データ型の最大長 (4,000) を超えない場合、暗黙的な変換によって UCS-2 または UTF-16 の文字列が生成されます。 それ以外の場合、暗黙的な変換では大きな値の nvarchar(max) が生成されます。

警告

Null 以外の varchar(max) または nvarchar(max) の各列には、24 バイトの追加の固定割り当てが必要です。これは並べ替え操作中の 8,060 バイトの行制限におけるカウント対象となります。 これらの追加バイトにより、テーブル内の Null 以外の varchar(max) または nvarchar(max) の列数について、暗黙的な制限が生じます。 テーブルの作成時やデータ挿入時に、最大行サイズが許容最大値の 8,060 バイトを超えるという通常の警告以外の、特別なエラーは提供されません。 この大きな行サイズにより、一部の通常操作の間に、ユーザーが予期しないエラー (エラー 512 など) が発生することがあります。 このような操作の 2 つの例は、クラスター化インデックス キーの更新と、列セット全体の並べ替えです。

文字データの変換

文字データを変換する方法の詳細については、 char と varchar (Transact-SQL) を参照してください。

こちらもご覧ください