nchar および nvarchar (Transact-SQL)

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL データベース はいAzure SQL Managed Instance はいAzure Synapse Analytics はいParallel Data Warehouse

固定サイズ (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^30-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-65535) を使用する文字は 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 と機能的に等価であるシステム提供のユーザー定義データ型は、 nvarchar (128), が許容されない点が異なります。 sysname データベース オブジェクト名を参照するために使用します。

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

SET ANSI_PADDING が ON にでは常に ncharnvarchar です。 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) を参照してください。

関連項目

ALTER TABLE (Transact-SQL)
CAST および CONVERT (Transact-SQL)
COLLATE (Transact-SQL)
CREATE TABLE (Transact-SQL)
データ型 (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
LIKE (Transact-SQL)
SET ANSI_PADDING (Transact-SQL)
SET @local_variable (Transact-SQL)
照合順序と Unicode のサポート
1 バイト文字セットとマルチバイト文字セット