nchar und nvarchar (Transact-SQL)nchar and nvarchar (Transact-SQL)

GILT FÜR: jaSQL Server (ab 2008) jaAzure SQL-DatenbankjaAzure SQL Data Warehouse jaParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Dieser Artikel beschreibt Zeichendatentypen, die entweder über eine feste Länge – nchar – oder über eine variable Länge – nvarchar – verfügen.Character data types that are either fixed-length, nchar, or variable-length, nvarchar. Ab SQL Server 2012 (11.x)SQL Server 2012 (11.x) gilt Folgendes: Wenn eine Sortierung mit aktivierten zusätzlichen Zeichen verwendet wird, speichern diese Datentypen den gesamten Bereich der Unicodezeichendaten und verwenden die Zeichencodierung 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. Wenn eine Sortierung ohne aktivierte zusätzliche Zeichen angegeben ist, speichern diese Datentypen nur die Teilmenge der Zeichendaten, die von der UCS-2-Zeichencodierung unterstützt werden.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.

ArgumenteArguments

nchar [ ( n ) ]nchar [ ( n ) ]
Zeichenfolgendaten mit fester Länge.Fixed-length string data. n definiert die Zeichenfolgenlänge in Bytepaaren und muss ein Wert zwischen 1 bis 4.000 sein.n defines the string length in byte-pairs and must be a value from 1 through 4,000. Die Speichergröße beträgt zweimal n Byte.The storage size is two times n bytes. Für die UCS-2-Codierung beträgt die Speichergröße zweimal n Byte, und die Anzahl von Zeichen, die gespeichert werden können, ist ebenfalls 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. Für die UTF-16-Codierung ist die Speichergröße noch zweimal n Byte, aber die Anzahl von Zeichen, die gespeichert werden können, ist ggf. kleiner als n, da zusätzliche Zeichen zwei Bytepaare verwenden (auch Ersatzzeichenpaar genannt).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). Die ISO-Synonyme für nchar lauten national char und national character.The ISO synonyms for nchar are national char and national character.

nvarchar [ ( n | max ) ]nvarchar [ ( n | max ) ]
Zeichenfolgendaten mit variabler Länge.Variable-length string data. n definiert die Zeichenfolgenlänge in Bytepaaren und ist ein Wert zwischen 1 bis 4.000.n defines the string length in byte-pairs and can be a value from 1 through 4,000. max gibt an, dass die maximale Speichergröße 2^30-1 Zeichen (2 GB) beträgt.max indicates that the maximum storage size is 2^30-1 characters (2 GB). Die Speichergröße beträgt zweimal n Byte + 2 Byte.The storage size is two times n bytes + 2 bytes. Für die UCS-2-Codierung beträgt die Speichergröße zweimal n Byte + 2 Byte, und die Anzahl von Zeichen, die gespeichert werden können, ist ebenfalls 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. Für die UTF-16-Codierung ist die Speichergröße noch zweimal n Byte + 2 Byte, aber die Anzahl von Zeichen, die gespeichert werden können, ist ggf. kleiner als n, da zusätzliche Zeichen zwei Bytepaare verwenden (auch Ersatzzeichenpaar genannt).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). Die ISO-Synonyme für nvarchar lauten national char varying und national character varying.The ISO synonyms for nvarchar are national char varying and national character varying.

RemarksRemarks

Wenn n in einer Datendefinitions- oder Variablendeklarationsanweisung nicht angegeben ist, beträgt die Standardlänge 1.When n is not specified in a data definition or variable declaration statement, the default length is 1. Wenn n in der CAST-Funktion nicht angegeben ist, beträgt die Standardlänge 30.When n is not specified with the CAST function, the default length is 30.

Wenn Sie nchar oder nvarchar verwenden, wird Folgendes empfohlen:If you use nchar or nvarchar, we recommend to:

  • Verwenden Sie nchar, wenn die Dateneinträge einer Spalte jeweils gleich lang sind.Use nchar when the sizes of the column data entries are consistent.
  • Verwenden Sie nvarchar, wenn sich die Dateneinträge einer Spalte in ihrer Größe erheblich unterscheiden.Use nvarchar when the sizes of the column data entries vary considerably.
  • Verwenden Sie nvarchar(max), wenn die Dateneinträge einer Spalte unterschiedlich lang sind, und die Zeichenfolgenlänge 4.000 Bytepaare überschreitet.Use nvarchar(max) when the sizes of the column data entries vary considerably, and the string length might exceed 4,000 byte-pairs.

sysname ist ein vom System bereitgestellter benutzerdefinierter Datentyp, der funktional nvarchar(128) entspricht, außer dass er keine NULL-Werte zulässt.sysname is a system-supplied user-defined data type that is functionally equivalent to nvarchar(128), except that it is not nullable. sysname wird zum Verweisen auf Datenbankobjektnamen verwendet.sysname is used to reference database object names.

Objekten, die nchar or nvarchar verwenden, wird die Standardsortierung der Datenbank zugewiesen, es sei denn, mithilfe der COLLATE-Klausel wird eine bestimmte Sortierung zugewiesen.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 hat für nchar und nvarchar immer den Wert ON.SET ANSI_PADDING is always ON for nchar and nvarchar. SET ANSI_PADDING OFF gilt nicht für die Datentypen nchar oder nvarchar.SET ANSI_PADDING OFF does not apply to the nchar or nvarchar data types.

Stellen Sie einer Unicode-Zeichenfolgenkonstanten den Buchstaben „N“ voran, um UCS-2- oder UTF-16-Eingabe zu markieren, je nachdem, ob eine Sortierung mit zusätzlichen Zeichen verwendet wird.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. Ohne das Präfix „N“ wird die Zeichenfolge in die Standardcodepage der Datenbank konvertiert, die einige Zeichen ggf. nicht erkennt.Without the N prefix, the string is converted to the default code page of the database that may not recognize certain characters. Ab SQL Server-2019 (Vorschau)SQL Server 2019 preview gilt Folgendes: Wenn eine Sortierung mit aktiviertem UTF-8 verwendet wird, kann die Standardcodepage einen UNICODE UTF-8-Zeichensatz speichern.Starting with SQL Server-2019 (Vorschau)SQL Server 2019 preview, when a UTF-8 enabled collation is used, the default code page is capable of storing UNICODE UTF-8 character set.

Hinweis

Geht einer Zeichenfolgenkonstante der Buchstabe „N“ voraus, gibt die implizite Konvertierung eine UCS-2- oder UTF-16-Zeichenfolge zurück, wenn die Konstante, die konvertiert werden soll, die maximale Länge für den Datentyp für „nvarchar“-Zeichenfolgen (4.000) nicht überschreitet.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). Andernfalls hat die implizite Konvertierung einen hohen „nvarchar(max)“-Wert zur Folge.Otherwise, the implicit conversion will result in a large-value nvarchar(max).

Warnung

Jede varchar(max)- oder nvarchar(max)-Spalte, die ungleich NULL ist, erfordert 24 Byte an zusätzlicher fester Zuteilung, die während eines Sortiervorgangs hinsichtlich des Zeilenlimits von 8.060 Byte gelten.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. Diese zusätzlichen Byte können zur Erstellung einer impliziten Beschränkung der Anzahl der varchar(max)- oder nvarchar(max)-Spalten führen, die ungleich NULL sind.These additional bytes can create an implicit limit to the number of non-null varchar(max) or nvarchar(max) columns in a table. Beim Erstellen der Tabelle (außerhalb der üblichen Warnung darüber, dass die maximale Zeilengröße das zulässige Maximum von 8.060 Byte überschreitet) oder beim Einfügen der Daten wird kein spezieller Fehler ausgegeben.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. Diese umfangreiche Zeilengröße kann Fehler verursachen (z.B. Fehler 512), die Benutzer während einiger normaler Vorgänge möglicherweise nicht vorhersehen können.This large row size can cause errors (such as error 512) that users may not anticipate during some normal operations. Die Aktualisierung eines gruppierten Indexschlüssels und Teile des vollständigen Spaltensatzes stellen zwei Beispiele für Vorgänge dieser Art dar.Two examples of operations are a clustered index key update, or sorts of the full column set.

Konvertieren von ZeichendatenConverting Character Data

Informationen zum Konvertieren von Zeichendaten finden Sie unter char und varchar (Transact-SQL).For information about converting character data, see char and varchar (Transact-SQL).

Siehe auchSee also

ALTER TABLE (Transact-SQL)ALTER TABLE (Transact-SQL)
CAST und CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)
COLLATE (Transact-SQL)COLLATE (Transact-SQL)
CREATE TABLE (Transact-SQL)CREATE TABLE (Transact-SQL)
Datentypen (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)
Sortierung und Unicode-Unterstützung Collation and Unicode Support
Einzelbyte- und Mehrbyte-ZeichensätzeSingle-Byte and Multibyte Character Sets