Laden...

Datentyp text und ntext - wie groß?

Erstellt von DiscMaster vor 16 Jahren Letzter Beitrag vor 16 Jahren 5.403 Views
DiscMaster Themenstarter:in
316 Beiträge seit 2006
vor 16 Jahren
Datentyp text und ntext - wie groß?

verwendetes Datenbanksystem: SQL-Server Express

hallo zusammen,

ich habe mal eine frage die mich mal so interessiert: wenn ich ein text- oder ntext-feld in einer Datenbanktabelle verwende, was wird dann beim datenabruf übertragen??
weil ich habe festgestellt das wenn ich z.B. nchar(20) verwende, habe ich exakt zwanzig stellen, wenn ich mehr reinschreiben will gibts ne exception, wenns weniger ist wird der rest mit leerzeichen aufgefüllt (wenn das 'eigentlich' nicht so ist, wärs auch schon zu wissen....). wenn ich jetzt aber das feld text verwende, was ja laut > dieser seite hier < bis zu 2^31-1 zeichen enthalten kann, bekomme ich dann auch einen rießen-datensatz mit mio. von leerzeichen? oder bekomme ich lediglich das was drinsteht?

DiscMaster

"Flache Hierarchien schaffen! Das muss konkret nicht unbedingt etwas bedeuten, kommt aber immer sehr gut an."
Bernd Stromberg

343 Beiträge seit 2007
vor 16 Jahren

ne, ne, keine Angst, beim Text ist das nicht so. Da werden nur die enthaltenen Zeichen übertragen (plus kleinem Oberhead nehm ich an). nchar hat dafür einen gewissen Geschwindigkeitsvorteil.

Mfg Preli

[- www.saftware.net -](http://www.saftware.net/)
A
138 Beiträge seit 2007
vor 16 Jahren

Hallo,

der Platzbedarf einer Zelle (dieser Art) ist n+1 Bytes (sofern kein UTF-8 o.ä.) bei gänigen Datenbanken, wobei n für die Länge des Textes steht.
Das +1 kommt dadurch zustande, dass am Ende des Textes ein 'Endzeichen' angefügt wird, oft ist es das Null-Byte.

V
6 Beiträge seit 2007
vor 16 Jahren

Hallo,

nimm doch nvarchar, da werden exakt die Anzahl Zeichen gespeichert, die die enthaltenen Daten haben.

DiscMaster Themenstarter:in
316 Beiträge seit 2006
vor 16 Jahren

Dann muss ich also kein schlechtes gewissen haben, wenn ich 20 spalten mit ntext oder text verwende, weil ich nicht vorher bestimmen kann wie viel in jeder spalte eines tages mal stehen wird...?

edit:

dann nimm doch nvarchar [...]

nvarchar(MAX) im SQL-Server nehm ich an?

"Flache Hierarchien schaffen! Das muss konkret nicht unbedingt etwas bedeuten, kommt aber immer sehr gut an."
Bernd Stromberg

343 Beiträge seit 2007
vor 16 Jahren

Original von Vincenz
nimm doch nvarchar, da werden exakt die Anzahl Zeichen gespeichert, die die enthaltenen Daten haben.

Ich kann mich irren, aber ich bin mir ziemlich sicher, dass nvarchar auch einen kleinen Geschwindigkeitsnachteil gegenüber varchar hat (sonst hätte man diesen Datentyp bestimmt schon aus dem Verkehr gezogen)

Mfg Preli

[- www.saftware.net -](http://www.saftware.net/)
A
138 Beiträge seit 2007
vor 16 Jahren

Hallo,
der Unterschied zwischen nvarchar und varchar ist, dass nvarchar den Text als Unicode abspeichert, während varchar eine ASCII, ANSI oder ISO Zeichensatz (usw.) verwendet.

3.825 Beiträge seit 2006
vor 16 Jahren

Hallo Discmaster,

nvarchar belegt doppelt soviel Speicherplatz wie varchar, kann aber auch mehr Zeichen darstellen (nämlich UTF-Zeichensatz). Sollte man also im Hinblick auf Verwendung von Sonderzeichen verwenden.

In beiden Fällen wird nur die tatsächliche Länge des Textes in der Datenbank gespeichert, egal wie lang das Feld in der Datenbank definiert ist. Deshalb das "var" im Datenbanktyp.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

476 Beiträge seit 2004
vor 16 Jahren

hallo zusammen,

was man aber dringend beim Verwenden von nvarchar und dergleichen beachten sollte ist zum Einen die max. Grenze von 4000 Bytes (SQL Server 2000) bzw. 8000 Bytes (SQL Server 2005) pro Feld, als auch zum Anderen die max. Größe einer Zeile von 8060 Bytes. Gerade weil mit den Datentypen variabler Feldlänge eine Überbuchung der max. Länge möglich ist, läuft man Gefahr diese außer acht zu lassen. Mehr dazu in der MSDN: http://msdn2.microsoft.com/de-de/library/ms186981.aspx

Daher würde ich für größere Texte schon text oder ntext benutzen.

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de