nchar および nvarchar (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
固定サイズ (nchar)、または可変サイズ (nvarchar) の文字データ型です。 SQL Server 2012 (11.x) 以降のバージョンでは、 Supplementary Character (SC) が有効な照合順序が使用されている場合、これらのデータ型は Unicode 文字データの全範囲を格納し、 UTF-16 文字エンコードを使用します。 SC が無効の照合順序を指定する場合、これらのデータ型には UCS-2 文字エンコードでサポートされている文字データのサブセットのみが格納されます。
引数
nchar [ ( n ) ]
固定サイズの文字列データです。 n によってバイト ペアでの文字列のサイズが定義されます。1 から 4,000 までの値にする必要があります。 ストレージのサイズは、n の 2 倍のバイト数です。 UCS-2 エンコードの場合、ストレージのサイズは n の 2 倍のバイト数となり、格納できる文字数もまた n となります。 UTF-16 エンコードの場合、ストレージ サイズは引き続き 2 倍n バイトですが、補助文字は 2 つのバイト ペア (surrogate ペアとも呼ばれます) を使用するため、格納できる文字数は 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 つのバイトペア (urrogate ペアとも呼ばれます) を使用するため、格納できる文字数は n よりも小さい場合があります。 ISO シノニム nvarchar は national char のさまざまな と 各国語文字がさまざまなです。
注釈
よくある誤解は、nchar(n) と nvarchar(n) では、n によって文字数が定義されると考えられていることです。 ただし、nchar(n) と nvarchar(n) では、n によって文字長がバイトペア (0-4,000) で定義されます。 n は、格納できる文字数を定義しません。 この概念は、 char と varchar の定義に似ています。
この誤解が生じるのは、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
は、nchar と nvarchar に対して常に 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を参照してください。 データ型間の変換の詳細については、 CAST と CONVERTを参照してください。