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
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
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.
Hallo,
nimm doch nvarchar, da werden exakt die Anzahl Zeichen gespeichert, die die enthaltenen Daten haben.
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
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
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.
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
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