nchar und nvarchar (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Dieser Artikel beschreibt Zeichendatentypen, die entweder über eine feste Größe – nchar – oder über eine variable Größe – nvarchar – verfügen. Ab 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. 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.

Argumente

nchar [ ( n ) ]

Zeichenfolgendaten mit fester Größe. n definiert die Zeichenfolgengröße in Bytepaaren und muss einem Wert zwischen 1 und 4.000 entsprechen. Die Speichergröße beträgt zweimal n Byte. 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. Bei der UTF-16-Codierung entspricht die Speichergröße weiterhin zweimal n Bytes. Allerdings kann die Anzahl der Zeichen, die gespeichert werden können, kleiner als n sein, da zusätzliche Zeichen zwei Bytepaare verwenden (auch Ersatzzeichenpaar genannt). Die ISO-Synonyme für nchar lauten national char und national character.

nvarchar [ ( n | max ) ]

Zeichenfolgendaten mit variabler Größe. n definiert die Zeichenfolgengröße in Bytepaaren und kann ein Wert zwischen 1 und 4.000 sein. max gibt an, dass die maximale Speichergröße 2^31-1 Zeichen (2 GB) beträgt. Die Speichergröße beträgt zweimal n Byte + 2 Byte. 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. Bei der UTF-16-Codierung entspricht die Speichergröße weiterhin zweimal n Bytes plus 2 Bytes. Allerdings kann die Anzahl der Zeichen, die gespeichert werden können, kleiner als n sein, da zusätzliche Zeichen zwei Bytepaare verwenden (auch Ersatzzeichenpaar genannt). Die ISO-Synonyme für nvarchar lauten national char varying und national character varying.

Bemerkungen

Ein gängiges Missverständnis besteht darin, dass das n in nchar(n) und nvarchar(n) die Anzahl der Zeichen definiert. Das n in nchar(n) und nvarchar(n) definiert jedoch die Zeichenfolgenlänge in Bytepaaren (0–4.000). n definiert niemals die Anzahl von Zeichen, die gespeichert werden können. Dies ist vergleichbar mit der Definition von char(n) und varchar(n).

Das Missverständnis entsteht, da bei der Verwendung von Zeichen, die im Unicode-Bereich 0–65.535 definiert sind, ein Zeichen pro Bytepaar gespeichert werden kann. In höheren Unicode-Bereichen (65.536–1.114.111) werden für ein Zeichen möglicherweise aber zwei Bytepaare verwendet. In einer als nchar(10) definierten Spalte kann Datenbank-Engine beispielsweise 10 Zeichen speichern, die ein Bytepaar verwenden (Unicode-Bereich 0–65.535), aber weniger als 10 Zeichen bei Verwendung von zwei Bytepaaren (Unicode-Bereich 65.536–1.114.111). Weitere Informationen zum Unicode-Speicher und -Zeichenbereichen finden Sie unter Speicherunterschiede zwischen UTF-8 und UTF-16.

Wenn n in einer Datendefinitions- oder Variablendeklarationsanweisung nicht angegeben ist, beträgt die Standardlänge 1. Wenn n in der CAST-Funktion nicht angegeben ist, beträgt die Standardlänge 30.

Wenn Sie nchar oder nvarchar verwenden, wird Folgendes empfohlen:

  • Verwenden Sie nchar, wenn die Dateneinträge einer Spalte jeweils gleich lang sind.
  • Verwenden Sie nvarchar, wenn sich die Dateneinträge einer Spalte in ihrer Größe erheblich unterscheiden.
  • Verwenden Sie nvarchar(max), wenn die Dateneinträge einer Spalte unterschiedlich lang sind, und die Zeichenfolgenlänge 4.000 Bytepaare überschreitet.

sysname ist ein vom System bereitgestellter benutzerdefinierter Datentyp, der funktional nvarchar(128) entspricht, außer dass er keine Nullwerte zulässt. sysname wird zum Verweisen auf Datenbankobjektnamen verwendet.

Objekten, die nchar oder nvarchar verwenden, wird die Standardsortierung der Datenbank zugewiesen, es sei denn, mithilfe der COLLATE-Klausel wird eine bestimmte Sortierung zugewiesen.

SET ANSI_PADDING entspricht für nchar und nvarchar immer ON. SET ANSI_PADDING OFF gilt nicht für die Datentypen nchar oder nvarchar.

Stellen Sie einer Unicode-Zeichenfolgenkonstanten den Buchstaben N voran, um die UCS-2- oder UTF-16-Eingabe zu signalisieren, je nachdem, ob eine SC-Sortierung verwendet wird. Ohne das Präfix N wird die Zeichenfolge in die Standardcodepage der Datenbank konvertiert, die einige Zeichen ggf. nicht erkennt. Ab SQL Server 2019 (15.x) gilt Folgendes: Wenn eine Sortierung mit aktiviertem UTF-8 verwendet wird, kann die Standardcodepage den Unicode UTF-8-Zeichensatz speichern.

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 Zeichenfolgendatentyp nvarchar (4.000) nicht überschreitet. Andernfalls hat die implizite Konvertierung einen hohen nvarchar(max)-Wert zur Folge.

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. 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. 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. 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. Die Aktualisierung eines gruppierten Indexschlüssels und Teile des vollständigen Spaltensatzes stellen zwei Beispiele für Vorgänge dieser Art dar.

Konvertieren von Zeichendaten

Informationen zum Konvertieren von Zeichendaten finden Sie unter char und varchar (Transact-SQL).

Siehe auch