1690 Stimmen

Was ist der Unterschied zwischen varchar und nvarchar?

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 ?

28voto

Amar Anondo Punkte 422

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.

26voto

Debendra Dash Punkte 4674

Der Hauptunterschied zwischen Varchar(n) y nvarchar(n) ist:

enter image description here

Varchar (Daten mit variabler Länge, Nicht-Unicode-Zeichen) bis zu 8000.

  1. Es ist ein Datentyp mit variabler Länge
  2. Dient zur Speicherung von Nicht-Unicode-Zeichen
  3. Belegt 1 Byte Platz für jedes Zeichen

enter image description here

Nvarchar : Unicode-Zeichendaten mit variabler Länge.

  1. Es ist ein Datentyp mit variabler Länge
  2. Wird zum Speichern von Unicode-Zeichen verwendet.
  3. Die Daten werden in einer Unicode-Kodierung gespeichert. Jede Sprache wird unterstützt. (z.B. die Sprachen Arabisch, Deutsch, Hindi, usw. usw.)

22voto

Alexander Bartosh Punkte 7681

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

20voto

incomudro Punkte 558

Meine zwei Cent

  1. 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).

  2. 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.

18voto

ranjit pawar Punkte 205

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X