| 

.NET C# Java Javascript Exception

3
Für Textspalten stehen einige Optionen zu Auswahl:

char(n)
varchar(n)
nchar(n)
nvarchar(n)
varchar(max)
nvarchar(max)


Kann bitte mal jemand kurz erklären,

  • Wo der Unterschied ist
  • Für welches Szenario welcher Typ eingesetzt werden soll

?
20.08.2009
jor 791 2 7
4 Antworten
3
Die Präfix 'n' bedeutet dass Unicode-Zeichen gespeichert werden können und dies bedeutet auch dass doppelt so viel Platz wie bei den anderen Varianten benötigt wird.

Die Präfix 'var' bedeutet dass die Größe variabel im Intervall 0 bis zur bei der Initialisierung angegebenen Größe ist - max ist die eingebaute vordefiniert Größe.

Was verwendet werden soll hängt vom Einsatzzweck ab. Werden keine Unicode-Zeichen gespeichert empfiehlt sich varchar(?) wobei die Größe an den zu erwarteten größten String anzupassen ist.
20.08.2009
gfoidl 9,4k 3 5
2
Als Ergänzung: Der Einsatz von CHAR(n) empfiehlt sich wirklich nur dort, wo alle gespeicherten Werte tatsächlich eine feste und immer gleiche Länge n haben. Jeder Wert in z.B. einem CHAR(8) Feld wird mit einer festen Länge von 8 gespeichert und ggfs. aufgefüllt. Aus einem
'Max'
wird damit ein
'Max     '
.
20.08.2009
FalkP 3,3k 3 8
1
Noch ein Wort zum Platzverbrauch: nvarchar verbraucht doppelt so viel Platz wie varchar, weil der SQL Server die Kodierung UCS-2 (etwas merkwürdig) benutzt und mit varchar die Kodierung, die du bei der Konfiguration gewählt hast (meist Latin bla bla = ISO-8859-1 = Westeuropäisch).

Wenn du (n)varchar(max) benutzt, werden die Zeichen bei kleinen Strings in der selben Datenbankseite gespeichert, bei extrem großen Strings auf extra DB-Seiten. Dadurch bleibt die Performance bei kleinen Strings ohne Verlust.
20.08.2009
Serda 455 2 7
0
max bedeutet, dass die Länge bis zu 2^31-1 betragen kann, also im Prinzip unendlich. Es empfiehlt sich, wenn Performance nicht das Problem ist, immer nvarchar(max) zu nehmen, weil dadurch keine Probleme mit Unicode oder Länge auftreten. Die Performance kann dann nachträglich gesteigert werden, indem auf varchar(max) umgestellt wird. Eine Verringerung der maximalen Länge bringt dagegen nichts, weil sowieso nur die tatsächliche Länge Platz verbraucht. Es macht daher höchstens aus Validierungsgründen Sinn, die maximale Länge zu verringern. Das sollte aber besser in der Anwendung selbst validiert werden.
20.08.2009
alexander 860 2 9
2
Na ich weiß nicht ob das eine gute Empfehlung ist. Wenn dem so wäre, dann bräuchte es die Einschränckung der maximalen Länge nicht zu geben und der Server könnte automatisch immer den maximalen Platz vorsehen. Man nennt sowas auch sinnvollen Umgang mit Resourcen.
Und Übrigens: 2^31-1 ist seeehr weit weg von unendlich ;)
FalkP 20.08.2009

Stelle deine Sql-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH