Frage

varchar(255), varchar(256), nvarchar(255) nvarchar(256), nvarchar(max), usw?

256 scheint wie eine nette, Runde, platzsparende Nummer.Aber ich habe gesehen, 255 Häufig verwendet.Warum?

Was ist der Unterschied zwischen varchar und nvarchar?

War es hilfreich?

Lösung

VARCHAR (255). Es wird nicht alle 255 Zeichen von Speicher verwenden, nur die Lagerung Sie benötigen. Es ist 255 und nicht 256, weil dann Sie Speicherplatz für 255 plus den Nullabschluss (oder Größe Byte).

Die "N" ist für Unicode. Verwenden Sie, wenn Sie nicht-ASCII-Zeichen erwartet.

Andere Tipps

In MS SQL Server (7.0 und höher) wird varchar-Daten dargestellt intern mit bis zu drei Werten:

  • Die eigentliche Zeichenfolge, die von 0 bis etwas mehr als 8000 Bytes sein (es ist auf Seitengröße basiert, die anderen Spalten für die Zeile gespeichert ist, und ein paar andere Faktoren)
  • Zwei Bytes verwendet, um anzuzeigen, wie lange die Datenfolge (die einen Wert von 0 bis 8000 produziert +)
  • Wenn die Spalte NULL-Werte zulässt, ein Bit in der Null-Bit-Maske der Zeile
  • (so der Null Status von bis zu acht Nullable-Spalten kann in einem Byte dargestellt werden)

Der wichtige Teil ist, dass zwei Byte Datenlänge Indikator. Wenn es ein Byte war, konnte man nur richtig Strings der Länge 0 bis 255 aufzuzeichnen; mit zwei Bytes, können Sie Strings der Länge 0 bis etwas über 64000+ (insbesondere 2 ^ 16 -1) aufzeichnen. Allerdings ist die SQL Server Seitenlänge 8k, das ist, wo die 8000+ Zeichenbegrenzung kommt. (Es gibt einen Datenüberlauf in Sachen SQL 2005, aber wenn Sie die Saiten so lange sein werden, sollten Sie gehen nur mit varchar (max).)

Also, egal wie lange Sie Ihre Datentyp varchar Spalte deklarieren sein (15, 127, 511), was Sie tatsächlich für jeden werden die Speicherung und jede Zeile ist:

  • 2 Byte, um anzuzeigen, wie lange die Zeichenfolge
  • Die eigentliche Zeichenfolge, das heißt die Anzahl der Zeichen in diesem String

Was mich zu meinem Punkt bekommt: eine Reihe von älteren Systemen verwendete nur 1 Byte die Länge der Zeichenfolge zu speichern, und dass Sie auf eine maximale Länge von 255 Zeichen beschränkt, die nicht so lang ist. Mit 2 Bytes, haben Sie keine solche willkürliche Grenze ... und so empfehle ich eine Nummernausgabe, die sinnvoll auf den (mutmaßlich nicht technisch orientiert) Benutzer macht. , Ich mag 50, 100, 250, 500, sogar 1000. Da die Basis von 8000+ Byte Speicherplatz, 255 oder 256 ist ebenso effizient wie 200 oder 250, und weniger effizient, wenn es darum geht, Zeit Dinge an die Endverbraucher zu erklären.

Dies gilt für einzelne Byte-Daten (d ANSII, SQL _ Latein1 * _ * General_CP1, et. Al.). Wenn Sie zum Speichern von Daten für mehrere Codepages oder Sprachen mit verschiedenen Alphabeten haben, müssen Sie mit dem Datentyp Nvarchar arbeiten (was meiner Meinung nach den gleichen, zwei Bytes für die Anzahl der charactesr funktioniert, aber jeder tatsächlicher Charakter der Daten erfordert zwei Byte Speicherplatz). Wenn Sie Strings wahrscheinlich gehen über 8000 oder mehr als 4000 in nvarchar, müssen Sie die [n] varchar (max) Datentypen verwenden.

Und wenn Sie wissen wollen, warum es so wichtig ist Platz einnehmen mit zusätzlichen Bytes nur zu verfolgen, wie lange die Daten Besuche http://www.joelonsoftware.com/articles/fog0000000319.html

Philip

Es gibt ein paar andere Punkte zu berücksichtigen, wenn char / varchar und die N Variationen definieren.

Erstens gibt es einige Kopfzeichenfolgen variabler Länge in der Datenbank zu speichern. Eine gute Faustregel ist CHAR für Strings verwenden weniger als 10 Zeichen lang sein, da N / VARCHAR speichert sowohl die Zeichenfolge und die Länge und die Differenz zwischen Speicher von kurz Strings in N / CHAR vs. N / VARCHAR unter 10 ist der Overhead der Stringlänge nicht wert.

Zweitens wird eine Tabelle in SQL-Server auf 8KB-Seiten gespeichert, so dass die maximale Größe der Datenzeile ist 8060 Bytes (die anderen 192 für Overhead von SQL verwendet). Deshalb SQL einen max definiert VARCHAR erlaubt (8000) und NVARCHAR (4000). Nun, Sie können verwenden VARCHAR (MAX) und die Unicode-Version. Aber es kann mit damit verbundenen zusätzlichen Aufwand sein.

Wenn mich nicht alles täuscht, SQL Server wird versuchen, die Daten auf der gleichen Seite wie der Rest der Zeile zu speichern, aber, wenn Sie zu viele Daten in eine VARCHAR (Max) Spalte zu setzen versuchen, wird es behandeln als binäre und speichern sie auf einer anderen Seite.

Ein weiterer großer Unterschied zwischen CHAR und VARCHAR hat mit Seitenteilungen zu tun. Da SQL Server speichert die Daten in 8-KB-Seiten, können Sie eine beliebige Anzahl von Datenzeilen auf einer Seite gespeichert haben könnte. Wenn Sie UPDATE eine VARCHAR-Spalte mit einem Wert, der groß genug ist, dass die Reihe nicht mehr fit auf der Seite, wird der Server Split , die Seite, der Losfahren eine Anzahl von Aufzeichnungen. Wenn die Datenbank keine verfügbaren Seiten hat und die Datenbank wird automatisch wachsen gesetzt ist, wird der Server zuerst die Datenbank wachsen leere Seiten, um es zuzuweisen, und leere Seiten der Tabelle zuordnen und teilen schließlich die einzige Seite in zwei Teile.

Wenn Sie werden andere Sprachen als Englisch unterstützt, möchten Sie nvarchar verwenden.

HTML sollte in Ordnung sein, solange es Standard-ASCII-Zeichen enthält. Ich habe nvarchar hauptsächlich in Datenbanken verwendet, die mehrsprachige Unterstützung waren.

Weil es 8-Bits in 1 Byte und so in 1 Byte können Sie bis zu 256 verschiedenen Werten speichern, was

0 1 2 3 4 5 ... 255

Beachten Sie die erste Zahl ist 0, so dass ein insgesamt 256 Zahlen.

Wenn Sie also nvarchar verwenden (255) Es wird mit 1 Byte die Länge speichern der Zeichenfolge aber wenn man von 1 umkippen und verwendet nvarchar (256) dann bist du 1 verschwenden mehr Byte nur für den zusätzlichen 1 Artikel aus von 255 (da Sie benötigen 2 Bytes der Zahl 256 speichern).

Das ist vielleicht nicht die tatsächliche Implementierung von SQL Server sein, aber ich glaube, dass die typische Argumentation ist, die Dinge bei 255 über 256 Artikeln zu begrenzen.

und nvarchar ist für Unicode, die 2+ Bytes pro Zeichen und
verwenden varchar ist für den normalen ASCII-Text, der nur 1 Byte verwenden

IIRC, 255 ist die maximale Größe eines varchar in MySQL, bevor Sie auf den Text-Datentyp wechseln hatte, oder an einem gewissen Punkt war (tatsächlich, ich glaube es jetzt höher ist). So halten es auf 255 könnte man eine gewisse Kompatibilität kaufen gibt. Sie werden diese bis schauen wollen, bevor auf ihn wirkenden, though.

varchar vs nvarchar ist ein bisschen wie ascii vs Unicode. varchar auf ein Byte pro Zeichen beschränkt ist, kann nvarchar zwei verwenden. Deshalb sollten Sie eine varchar haben kann (8000), aber nur eine nvarchar (4000)

Sowohl varchar und nvarchar Auto-Größe auf den Inhalt, aber die Zahl, die Sie definieren, wenn der Spaltentyp deklarieren ein Maximum ist.

Werte in „nvarchar“ nehmen zweimal die Platte / Speicherplatz als „varchar“, weil Unicode Zwei-Byte ist, aber wenn Sie den Spaltentyp deklarieren Sie die Anzahl der Zeichen deklarieren, nicht Bytes.

Wenn Sie also eine Spaltentyp definieren, sollten Sie die maximale Anzahl von Zeichen, die die Spalte je, dass als varchar (oder nvarchar) Größe halten und haben müssen.

Eine gute Faustregel der maximalen Stachel Länge die Säule muss abschätzen halten, dann Unterstützung hinzufügen, um es etwa 10% mehr Zeichen Probleme mit unerwartet langen Daten in der Zukunft zu vermeiden.

varchar (255) war auch die maximale Länge in SQL Server 7.0 und früher.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top