Ist es nur, dass nvarchar
unterstützt Multibyte-Zeichen? Wenn das der Fall ist, gibt es dann wirklich einen Grund, abgesehen von Speicherproblemen, für die Verwendung von varchars
?
Antworten
Zu viele Anzeigen?varchar
wird verwendet für non-Unicode characters
nur auf der anderen Seite nvarchar
wird sowohl für unicode
y non-unicode
Zeichen. Einige andere Unterschiede zwischen ihnen werden im Folgenden aufgeführt.
VARCHAR vs. NVARCHAR
VARCHAR
NVARCHAR
Zeichen Datentyp
Zeichen mit variabler Länge, die nicht Unicode sind
Variable Länge, sowohl Unicode- als auch Nicht-Unicode-Zeichen wie Japanisch, Koreanisch und Chinesisch.
Maximale Länge
Bis zu 8,000 characters
Bis zu 4,000 characters
Zeichengröße
Nimmt auf 1 byte
pro Zeichen
Nimmt auf 2 bytes
pro Unicode/Nicht-Unicode-Zeichen
Speichergröße
Tatsächliche Länge (in Bytes)
2 mal Tatsächliche Länge (in Bytes)
Verwendung
Wird verwendet, wenn die Datenlänge variabel ist oder die Spaltenlänge variabel ist und wenn die tatsächlichen Daten immer weit unter der Kapazität liegen
Aufgrund des geringen Speicherplatzes nur zu verwenden, wenn Sie Unicode-Unterstützung benötigen, wie z. B. die japanischen Kanji oder die koreanischen Hangul-Zeichen.
Der Hauptunterschied zwischen Varchar(n)
y nvarchar(n)
ist:
Varchar
(Daten mit variabler Länge, Nicht-Unicode-Zeichen) bis zu 8000.
- Es ist ein Datentyp mit variabler Länge
- Dient zur Speicherung von Nicht-Unicode-Zeichen
- Belegt 1 Byte Platz für jedes Zeichen
Nvarchar
: Unicode-Zeichendaten mit variabler Länge.
- Es ist ein Datentyp mit variabler Länge
- Wird zum Speichern von Unicode-Zeichen verwendet.
- Die Daten werden in einer Unicode-Kodierung gespeichert. Jede Sprache wird unterstützt. (z.B. die Sprachen Arabisch, Deutsch, Hindi, usw. usw.)
Seit SQL Server 2019 unterstützen varchar-Spalten die UTF-8-Kodierung.
Von nun an ist der Unterschied also die Größe.
In einem Datenbanksystem bedeutet dies einen Geschwindigkeitsunterschied.
Weniger Größe = weniger IO + weniger Speicher = mehr Geschwindigkeit im Allgemeinen. Lesen Sie den obigen Artikel, um die Zahlen zu erfahren.
Gehen Sie für varchar in UTF8 von nun an!
Nur wenn Sie großer Prozentsatz von Daten mit Zeichen in den Bereichen 2048 - 16383 und 16384 - 65535 - müssen Sie messen
Meine zwei Cent
-
Indizes können fehlschlagen, wenn nicht die richtigen Datentypen verwendet werden:
In SQL Server: Wenn Sie einen Index über eine VARCHAR-Spalte haben und ihr einen Unicode-String übergeben, verwendet SQL Server den Index nicht. Dasselbe passiert, wenn Sie einer indizierten Spalte, die SmallInt enthält, eine BigInt übergeben. Selbst wenn die BigInt klein genug ist, um eine SmallInt zu sein, ist SQL Server nicht in der Lage, den Index zu verwenden. Umgekehrt gibt es dieses Problem nicht (wenn Sie SmallInt oder Ansi-Code an eine indizierte BigInt- oder NVARCHAR-Spalte übergeben). -
Datentypen können zwischen verschiedenen DBMS (DataBase Management System) variieren:
Beachten Sie, dass jede Datenbank leicht unterschiedliche Datentypen hat und VARCHAR nicht überall dasselbe bedeutet. Während SQL Server VARCHAR und NVARCHAR hat, hat eine Apache/Derby-Datenbank nur VARCHAR und dort ist VARCHAR in Unicode.
Hauptsächlich nvarchar speichert Unicode-Zeichen und varchar speichert Nicht-Unicode-Zeichen.
"Unicodes" ist ein 16-Bit-Zeichenkodierungsschema, das es ermöglicht, Zeichen aus vielen anderen Sprachen wie Arabisch, Hebräisch, Chinesisch und Japanisch in einem einzigen Zeichensatz zu kodieren.
Das bedeutet, dass Unicodes 2 Bytes pro Zeichen zum Speichern verwendet und Non-Unicodes nur ein Byte pro Zeichen zum Speichern verwendet. Das bedeutet, dass Unicodes im Vergleich zu Non-Unicodes die doppelte Speicherkapazität benötigen.