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 ?

13voto

Mike Spross Punkte 7801

Sie haben Recht. nvarchar speichert Unicode-Daten, während varchar speichert Einzelbyte-Zeichendaten. Abgesehen von den Unterschieden bei der Speicherung ( nvarchar benötigt doppelt so viel Speicherplatz wie varchar ), die Sie bereits erwähnt haben, der Hauptgrund für die Bevorzugung von nvarchar en varchar wäre die Internationalisierung (d. h. die Speicherung von Zeichenketten in anderen Sprachen).

11voto

sleepy012 Punkte 171

Ich würde sagen, es kommt darauf an.

Wenn Sie eine Desktop-Anwendung entwickeln, bei der das Betriebssystem in Unicode arbeitet (wie alle aktuellen Windows-Systeme) und die Sprache nativ Unicode unterstützt (Standard-Strings sind Unicode, wie in Java oder C#), dann verwenden Sie nvarchar.

Wenn Sie eine Webanwendung entwickeln, bei der Strings im Format UTF-8 eingehen, und die Sprache PHP ist, die Unicode immer noch nicht nativ unterstützt (in Version 5.x), dann ist varchar wahrscheinlich die bessere Wahl.

11voto

Vijesh VP Punkte 4478

NVarchar hilft Ihnen bei der Speicherung von Unicode-Zeichen. Dies ist der richtige Weg, wenn Sie lokalisierte Daten speichern wollen.

9voto

Jithin Shaji Punkte 5453

Wenn ein einzelnes Byte zum Speichern eines Zeichens verwendet wird, gibt es 256 mögliche Kombinationen, so dass Sie 256 verschiedene Zeichen speichern können. Kollation ist das Muster, das die Zeichen und die Regeln, nach denen sie verglichen und sortiert werden, definiert.

1252, die Latin1 (ANSI), ist die am weitesten verbreitete. Ein-Byte-Zeichensätze reichen auch nicht aus, um alle Zeichen zu speichern, die in vielen Sprachen verwendet werden. Einige asiatische Sprachen haben zum Beispiel Tausende von Zeichen, so dass sie zwei Bytes pro Zeichen verwenden müssen.

Unicode-Norm

Wenn Systeme mit mehreren Codepages in einem Netz verwendet werden, wird es schwierig, die Kommunikation zu verwalten. Um die Dinge zu standardisieren, haben die ISO und das Unicode-Konsortium die Unicode . Unicode verwendet zwei Bytes zur Speicherung jedes Zeichens. Das heißt, es können 65.536 verschiedene Zeichen definiert werden, so dass fast alle Zeichen mit Unicode abgedeckt werden können. Wenn zwei Computer Unicode verwenden, wird jedes Symbol auf die gleiche Weise dargestellt und es ist keine Umwandlung erforderlich - das ist die Idee hinter Unicode.

SQL Server verfügt über zwei Kategorien von Zeichendatentypen:

  • Nicht-Unicode (char, varchar und text)
  • Unicode (nchar, nvarchar und ntext)

Wenn wir Zeichendaten aus mehreren Ländern speichern müssen, verwenden wir immer Unicode.

9voto

Ali Elmi Punkte 366

Obwohl NVARCHAR Unicode speichert, sollten Sie mit Hilfe der Kollationierung auch berücksichtigen, dass Sie VARCHAR und speichern Sie Ihre Daten in Ihrer Landessprache.

Stellen Sie sich das folgende Szenario vor.

Die Sortierung Ihrer DB ist persisch und Sie speichern einen Wert wie '' (persische Schreibweise von Ali) in der VARCHAR(10) Datentyp. Es gibt kein Problem und das DBMS verwendet nur drei Bytes, um ihn zu speichern.

Wenn Sie jedoch Ihre Daten in eine andere Datenbank übertragen und das korrekte Ergebnis sehen wollen, muss Ihre Zieldatenbank die gleiche Sortierung wie die Zieldatenbank haben, was in diesem Beispiel Persisch ist.

Wenn Ihre Zielsortierung anders ist, sehen Sie in der Zieldatenbank einige Fragezeichen(?).

Denken Sie schließlich daran, dass Sie bei einer großen Datenbank, die für die Verwendung in Ihrer Landessprache bestimmt ist, die Ortsangabe verwenden sollten, anstatt zu viele Leerzeichen zu verwenden.

Ich glaube, dass das Design anders sein kann. Es hängt von der Umgebung ab, in der Sie arbeiten.

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