nchar および nvarchar (Transact-SQL)nchar and nvarchar (Transact-SQL)

適用対象: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

固定サイズ (nchar)、または可変サイズ (nvarchar) の文字データ型です。Character data types that are either fixed-size, nchar, or variable-size, nvarchar. SQL Server 2012 (11.x)SQL Server 2012 (11.x) 以降、補助文字 (SC) が有効になっている照合順序を使用する場合、これらのデータ型には Unicode 文字データの全範囲が格納され、UTF-16 文字エンコードが使用されます。Starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x), when a Supplementary Character (SC) enabled collation is used, these data types store the full range of Unicode character data and use the UTF-16 character encoding. SC が無効の照合順序を指定する場合、これらのデータ型には UCS-2 文字エンコードでサポートされている文字データのサブセットのみが格納されます。If a non-SC collation is specified, then these data types store only the subset of character data supported by the UCS-2 character encoding.

引数Arguments

nchar [ ( n ) ]nchar [ ( n ) ]
固定サイズの文字列データです。Fixed-size string data. n によってバイト ペアでの文字列のサイズが定義されます。1 から 4,000 までの値にする必要があります。n defines the string size in byte-pairs and must be a value from 1 through 4,000. ストレージのサイズは、n の 2 倍のバイト数です。The storage size is two times n bytes. UCS-2 エンコードの場合、ストレージのサイズは n の 2 倍のバイト数となり、格納できる文字数もまた n となります。For UCS-2 encoding, the storage size is two times n bytes and the number of characters that can be stored is also n. UTF-16 エンコードの場合、ストレージのサイズは引き続き n の 2 倍のバイト数ですが、補助文字によって 2 つのバイト ペア (またはサロゲート ペア) が使用されるため、格納できる文字数は n よりも少なくなる場合があります。For UTF-16 encoding, the storage size is still two times n bytes but the number of characters that can be stored may be smaller than n because Supplementary Characters use two byte-pairs (also called surrogate-pair). nchar の ISO シノニムは、national char および national character です。The ISO synonyms for nchar are national char and national character.

nvarchar [ ( n | max ) ]nvarchar [ ( n | max ) ]
可変サイズの文字列データです。Variable-size string data. n によってバイト ペアでの文字列のサイズが定義されます。1 から 4,000 までの値を指定できます。n defines the string size in byte-pairs and can be a value from 1 through 4,000. max は、ストレージの最大サイズが 2^30-1 文字 (2 GB) であることを示します。max indicates that the maximum storage size is 2^30-1 characters (2 GB). ストレージのサイズは、n の 2 倍のバイト数 + 2 バイトです。The storage size is two times n bytes + 2 bytes. UCS-2 エンコードの場合、ストレージのサイズは n の 2 倍のバイト数 + 2 バイトとなり、格納できる文字数もまた n となります。For UCS-2 encoding, the storage size is two times n bytes + 2 bytes and the number of characters that can be stored is also n. UTF-16 エンコードの場合、ストレージのサイズは引き続き n の 2 倍のバイト数 + 2 バイトですが、補助文字によって 2 つのバイト ペア (またはサロゲート ペア) が使用されるため、格納できる文字数は n よりも少なくなる場合があります。For UTF-16 encoding, the storage size is still two times n bytes + 2 bytes but the number of characters that can be stored may be smaller than n because Supplementary Characters use two byte-pairs (also called surrogate-pair). ISO シノニム nvarchar は national char のさまざまな 各国語文字がさまざまなですThe ISO synonyms for nvarchar are national char varying and national character varying.

RemarksRemarks

一般的な誤解として、NCHAR(n) および NVARCHAR(n) では n によって文字数が定義されると考えられています。A common misconception is to think that NCHAR(n) and NVARCHAR(n), the n defines the number of characters. 実際には、NCHAR(n) および NVARCHAR(n) では、n によって文字長がバイトペア (0-4,000) で定義されます。But in NCHAR(n) and NVARCHAR(n) the n defines the string length in byte-pairs (0-4,000). n は、格納できる文字数を定義しません。n never defines numbers of characters that can be stored. これは、CHAR(n) および VARCHAR(n) の定義と同様です。This is similar to the definition of CHAR(n) and VARCHAR(n).
この誤解が生じるのは、Unicode の範囲 0-65,535 で定義された文字を使用すると、各バイトペアにつき 1 つの文字を格納できるためです。The misconception happens because when using characters defined in the Unicode range 0-65,535, one character can be stored per each byte-pair. しかしながら、より高い Unicode の範囲 (65,536-1,114,111) の場合、1 つの文字で 2 つのバイトペアが使用されることがあります。However, in higher Unicode ranges (65,536-1,114,111) one character may use two byte-pairs. たとえば、NCHAR(10) として定義された列では、データベース エンジンDatabase Engineで格納できる文字は、1 つのバイトペア (Unicode 範囲 0-65535) を使用する文字は 10 個ですが、2 つのバイトペア (Unicode 範囲 65,536-1,114,111) を使用する場合は 10 個未満です。For example, in a column defined as NCHAR(10), the データベース エンジンDatabase Engine can store 10 characters that use one byte-pair (Unicode range 0-65,535), but less than 10 characters when using two byte-pairs (Unicode range 65,536-1,114,111). Unicode の格納と文字の範囲の詳細については、「UTF-8 と UTF-16 でのストレージの相違点」を参照してください。For more information about Unicode storage and character ranges, see Storage differences between UTF-8 and UTF-16.

データ定義または変数宣言ステートメントで n を指定しないと、既定の長さは 1 になります。When n is not specified in a data definition or variable declaration statement, the default length is 1. CAST 関数で n を指定しないと、既定の長さは 30 になります。When n is not specified with the CAST function, the default length is 30.

nchar または nvarchar を使用する場合は、次のことをお勧めします。If you use nchar or nvarchar, we recommend to:

  • 列データ エントリのサイズが一定の場合は、nchar を使用します。Use nchar when the sizes of the column data entries are consistent.
  • 列データ エントリのサイズが大幅に変化する場合は、nvarchar を使用します。Use nvarchar when the sizes of the column data entries vary considerably.
  • 列データ エントリのサイズが大幅に変化し、かつ文字列の長さが 4,000 バイト ペアを超える可能性がある場合は、nvarchar(max) を使用します。Use nvarchar(max) when the sizes of the column data entries vary considerably, and the string length might exceed 4,000 byte-pairs.

sysname と機能的に等価であるシステム提供のユーザー定義データ型は、 nvarchar (128) , が許容されない点が異なります。sysname is a system-supplied user-defined data type that is functionally equivalent to nvarchar(128), except that it is not nullable. sysname データベース オブジェクト名を参照するために使用します。sysname is used to reference database object names.

使用するオブジェクト nchar または nvarchar COLLATE 句を使用して、特定の照合順序が割り当てられていない限り、データベースの既定の照合順序は割り当てられます。Objects that use nchar or nvarchar are assigned the default collation of the database unless a specific collation is assigned using the COLLATE clause.

SET ANSI_PADDING が ON にでは常に ncharnvarcharです。SET ANSI_PADDING is always ON for nchar and nvarchar. SET ANSI_PADDING OFF には適用されませんが、 nchar または nvarchar データ型。SET ANSI_PADDING OFF does not apply to the nchar or nvarchar data types.

Unicode 文字の文字列定数には、プレフィックスとして文字 N を付けて UCS-2 または UTF-16 の入力を通知します。これは SC 照合順序が使用されているか使用されていないかによって異なります。Prefix a Unicode character string constants with the letter N to signal UCS-2 or UTF-16 input, depending on whether an SC collation is used or not. プレフィックス N がない場合、文字列はデータベースの既定のコード ページに変換され、特定の文字が認識されない場合があります。Without the N prefix, the string is converted to the default code page of the database that may not recognize certain characters. SQL Server 2019 (15.x)SQL Server 2019 (15.x) 以降、UTF-8 が有効になっている照合順序を使用する場合、既定のコード ページでは UNICODE UTF-8 文字セットを格納させることができます。Starting with SQL Server 2019 (15.x)SQL Server 2019 (15.x), when a UTF-8 enabled collation is used, the default code page is capable of storing UNICODE UTF-8 character set.

注意

文字列定数にプレフィックスとして文字 N を付けたときに、変換する定数の長さが nvarchar 文字列データ型の最大長 (4,000) を超えない場合、暗黙的な変換によって UCS-2 または UTF-16 の文字列が生成されます。When prefixing a string constant with the letter N, the implicit conversion will result in a UCS-2 or UTF-16 string if the constant to convert does not exceed the max length for the nvarchar string data type (4,000). それ以外の場合、暗黙的な変換では大きな値の nvarchar(max) が生成されます。Otherwise, the implicit conversion will result in a large-value nvarchar(max).

警告

Null 以外の varchar(max) または nvarchar(max) の各列には、24 バイトの追加の固定割り当てが必要です。これは並べ替え操作中の 8,060 バイトの行制限におけるカウント対象となります。Each non-null varchar(max) or nvarchar(max) column requires 24 bytes of additional fixed allocation, which counts against the 8,060-byte row limit during a sort operation. これらの追加バイトにより、テーブル内の Null 以外の varchar(max) または nvarchar(max) の列数について、暗黙的な制限が生じます。These additional bytes can create an implicit limit to the number of non-null varchar(max) or nvarchar(max) columns in a table. テーブルの作成時やデータ挿入時に、最大行サイズが許容最大値の 8,060 バイトを超えるという通常の警告以外の、特別なエラーは提供されません。No special error is provided when the table is created (beyond the usual warning that the maximum row size exceeds the allowed maximum of 8,060 bytes) or at the time of data insertion. この大きな行サイズにより、一部の通常操作の間に、ユーザーが予期しないエラー (エラー 512 など) が発生することがあります。This large row size can cause errors (such as error 512) that users may not anticipate during some normal operations. このような操作の 2 つの例は、クラスター化インデックス キーの更新と、列セット全体の並べ替えです。Two examples of operations are a clustered index key update, or sorts of the full column set.

文字データの変換Converting Character Data

文字データを変換する方法の詳細については、 char と varchar (Transact-SQL) を参照してください。For information about converting character data, see char and varchar (Transact-SQL).

参照See also

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