Wie viele Zeichen kann nvarchar (MAX) maximal enthalten?

102

Ich bin neu im Konzept nvarchar(MAX). Wie viele Zeichen wird es enthalten?

Quakkels
quelle

Antworten:

155

Max. Die Kapazität beträgt 2 Gigabyte Speicherplatz. Sie sehen also etwas mehr als 1 Milliarde 2-Byte-Zeichen, die in ein NVARCHAR(MAX)Feld passen .

Wenn Sie die detaillierteren Zahlen der anderen Antwort verwenden, sollten Sie in der Lage sein, diese zu speichern

(2 ^ 31 - 1 - 2) / 2 = 1'073'741'822 double-byte characters

1 billion, 73 million, 741 thousand and 822 characters to be precise

in Ihrer NVARCHAR(MAX)Spalte (leider ist das letzte halbe Zeichen verschwendet ...)

Update: Wie @MartinMulder hervorhob: Jede Zeichenspalte mit variabler Länge hat auch einen Overhead von 2 Byte zum Speichern der tatsächlichen Länge. Daher musste ich zwei weitere Bytes von der 2 ^ 31 - 1zuvor festgelegten Länge abziehen. Sie können also 1 Unicode-Zeichen kleiner als speichern Ich hatte vorher behauptet.

marc_s
quelle
1
Wow ... also muss ich mir wohl keine Gedanken darüber machen, wie ich eine Validierungsregel für die maximale Größe festlegen soll. Ich sollte jedoch vorsichtig sein, wenn ich den nvarchar (MAX) verwende.
Quakkels
20
@quakkels: Wenn Sie nicht vorhaben, Tolstois Krieg und Frieden (ca. 3,1 Millionen Zeichen) fast 350-mal zu übertreffen - nein, Sie müssen sich keine Sorgen um die Kapazität machen :-) Und da es sich um einen VARCHAR / NVARCHAR-Typ handelt, wird dies der Fall sein Verwenden Sie immer nur so viel Speicherplatz wie nötig - keine Sorge um verschwendeten oder unnötig reservierten Speicherplatz ...
marc_s
2
Ja wirklich? Das ist cool. In welchem ​​Fall möchten Sie aus Neugier nicht nvarchar (MAX) verwenden?
Quakkels
5
@quakkels: Verwenden VARCHAR(MAX)Sie diese Option , wenn Sie die 2-Byte-Unterstützung für asiatische, arabische oder kyrillische Sprachen nicht benötigen. Verwenden (N)VARCHAR(x)Sie diese Option, wenn Sie wissen, dass eine Zeichenfolge niemals länger als x Zeichen sein wird (nicht NVARCHAR(MAX)für einen Vornamen verwenden - verwenden NVARCHAR(50)oder was auch immer für Sie sinnvoll ist)
marc_s
1
Ich habe gerade meinen Morgen damit begonnen, mir dieselbe Frage zu stellen, und Ihre beiden Antworten zauberten ein breites Lächeln auf mein Gesicht. +1.
Matthis Kohli
11

Von char und varchar (Transact-SQL)

varchar [(n | max)]

Nicht-Unicode-Zeichendaten mit variabler Länge. n kann ein Wert von 1 bis 8.000 sein. max gibt an, dass die maximale Speichergröße 2 ^ 31-1 Byte beträgt. Die Speichergröße ist die tatsächliche Länge der eingegebenen Daten + 2 Bytes. Die eingegebenen Daten können 0 Zeichen lang sein. Die ISO-Synonyme für varchar sind char variierend oder zeichenvariierend.

Adriaan Stander
quelle
4

2 ^ 31-1 Bytes. Also etwas weniger als 2 ^ 31-1 Zeichen für varchar (max) und die Hälfte für nvarchar (max).

nchar und nvarchar

Thomas
quelle