nchar und nvarchar (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Dieser Artikel beschreibt Zeichendatentypen, die entweder über eine feste Größe – nchar – oder über eine variable Größe – nvarchar – verfügen. In SQL Server 2012 (11.x) und höheren Versionen speichern diese Datentypen, wenn eine aktivierte Sortierung eines ergänzenden Zeichens (Supplement Character , SC) verwendet wird, den vollständigen Bereich von Unicode-Zeichendaten und verwenden die UTF-16-Zeichencodierung . 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 UTF-16-Codierung ist die Speichergröße immer noch zweimal n Byte, aber die Anzahl der Zeichen, die gespeichert werden können, kann kleiner als n sein, da Zusatzzeichen zwei Byte-Paare (auch als Ersatzpaare bezeichnet) verwenden. Die ISO-Synonyme für nchar lauten national char und national character.
nvarchar [ ( n | max ) ]
Zeichenfolgendaten mit variabler Größe. Der Wert von n definiert die Zeichenfolgengröße in Bytepaaren und kann 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 UTF-16-Codierung beträgt die Speichergröße immer noch zweimal n Byte + 2 Byte. Die Anzahl der Zeichen, die gespeichert werden können, kann jedoch kleiner als n sein, da Zusatzzeichen zwei Bytepaare (auch als Ersatzpaare bezeichnet) verwenden. 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. Dieses Konzept ähnelt der Definition von Char und Varchar.
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 bis 1.114.111) kann jedoch ein Zeichen zwei Bytepaare verwenden. 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 N
Präfix wird die Zeichenfolge in die Standardcodeseite der Datenbank konvertiert, die bestimmte Zeichen möglicherweise nicht erkennt. In SQL Server 2019 (15.x) und höheren Versionen, wenn eine UTF-8-aktivierte Sortierung verwendet wird, kann die Standardcodeseite den Unicode UTF-8-Zeichensatz speichern.
Wenn Sie eine Zeichenfolgenkonstante mit dem Buchstaben N
voranstellen, führt die implizite Konvertierung zu einer UCS-2- oder UTF-16-Zeichenfolge, wenn die zu konvertierende Konstante die maximale Länge für den Datentyp nvarchar-Zeichenfolge (4.000) nicht überschreitet. Andernfalls führt die implizite Konvertierung zu einem großen Wert 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. 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 große Zeilengröße kann Zu Fehlern (z. B. Fehler 512) führen, die Benutzer bei einigen normalen Vorgängen möglicherweise nicht erwarten. 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. Weitere Informationen zum Konvertieren zwischen Datentypen finden Sie unter CAST und CONVERT.
Zugehöriger Inhalt
- ALTER TABLE (Transact-SQL)
- CAST und CONVERT (Transact-SQL)
- COLLATE (Transact-SQL)
- CREATE TABLE (Transact-SQL)
- Data types (Transact-SQL) (Datentypen (Transact-SQL))
- DECLARE @local_variable (Transact-SQL)
- LIKE (Transact-SQL)
- SET ANSI_PADDING (Transact-SQL)
- SET @local_variable (Transact-SQL)
- Collation and Unicode Support
- Einzelbyte- und Mehrbyte-Zeichensätze