Ja, es verwendet 2 Bytes, benutzt die Datalänge, um die Speichergröße zu erhalten, du kannst nicht LEN verwenden, weil LEN nur die Zeichen zählt, siehe hier: Die Unterschiede zwischen LEN und DATALENGTH in SQL Server
%Vor%Hier ist, was Books On Line hat: Ссылка
Zeichendatentypen, die entweder feste Länge, nchar, oder variable Länge, nvarchar, Unicode Daten und verwenden Sie den UNICODE UCS-2 Zeichensatz.
nchar [(n)]
Unicode fester Länge Zeichendaten von n Zeichen. n muss sei ein Wert von 1 bis 4.000. Das Speichergröße ist zweimal n Bytes. Das ISO-Synonyme für nchar sind national Saibling und nationaler Charakter.
nvarchar [(n | max)]
Unicode-Zeichen mit variabler Länge Daten. n kann ein Wert von 1 bis sein 4.000. max gibt das Maximum an Speichergröße ist 2 ^ 31-1 Bytes. Das Speichergröße, in Bytes, ist zweimal die Anzahl der eingegebenen Zeichen + 2 Bytes. Die eingegebenen Daten können 0 sein Zeichen in der Länge. Die ISO-Synonyme für nvarchar sind nationale char variant und nationaler Charakter variiert.
Diese Unicode-Komprimierung wurde in SQL Server 2008 R2 eingeführt, sodass Ascii als 1 Byte gespeichert werden kann. Sie können hier über die Unicode-Komprimierung nachlesen Ссылка
Da es mehr als 65536 Zeichen gibt, sollte es offensichtlich sein, dass ein Zeichen unmöglich in nur zwei Oktetts (d. h. 16 Bits) passen kann.
SQL Server verwendet wie die meisten Microsoft-Produkte (Windows, .NET, NTFS, ...) UTF-16 zum Speichern von Text, wobei ein Zeichen entweder zwei oder vier Oktette belegt, obwohl @SQLMenace darauf hinweist, aktuelle Versionen von SQL Server verwenden Komprimierung, um das zu reduzieren.
Mein Verständnis dieses Problems ist, dass SQL Server intern UCS-2 verwendet, aber dass seine UCS-2-Implementierung gehackt wurde, um eine Teilmenge von Zeichen mit bis zu 4 Byte im GB18030-Zeichensatz , die als UCS-2 gespeichert sind, aber bei der Abfrage transparent von der Datenbank-Engine wieder in Multibyte-Zeichen konvertiert werden.
>Ersatzzeichen / Zusatzzeichen werden nicht vollständig unterstützt - die Implementierung einiger SQL Server-Zeichenfolgenfunktionen unterstützt keine Ersatzpaare, wie detailliert hier .
Tags und Links sql-server unicode