Ich habe Zeichendaten variabler Länge und möchte sie in der SQL Server-Datenbank (2005) speichern. Ich möchte einige bewährte Methoden zur Auswahl des TEXT SQL-Typs oder des VARCHAR SQL-Typs sowie der Vor- und Nachteile in Bezug auf Leistung / Footprint / Funktion kennenlernen.
sql-server
text
varchar
sqldatatypes
George2
quelle
quelle
Antworten:
Wenn Sie SQL Server 2005 oder höher verwenden, verwenden Sie
varchar(MAX)
. Dertext
Datentyp ist veraltet und sollte nicht für neue Entwicklungsarbeiten verwendet werden. Aus den Dokumenten :quelle
TEXT
wird für große Teile von Zeichenfolgendaten verwendet. Wenn die Länge des Feldes einen bestimmten Schwellenwert überschreitet, wird der Text außerhalb der Zeile gespeichert.VARCHAR
wird immer in Zeilen gespeichert und ist auf 8000 Zeichen begrenzt. Wenn Sie versuchen, ein zu erstellenVARCHAR(x)
, wobei x> 8000 ist, wird eine Fehlermeldung angezeigt:Diese Längenbeschränkungen betreffen nicht
VARCHAR(MAX)
in SQL Server 2005 , die der Zeile gespeichert werden kann, genau wieTEXT
.Beachten Sie, dass dies
MAX
hier keine Art von Konstante istVARCHAR
undVARCHAR(MAX)
sehr unterschiedliche Typen sind, wobei letztere sehr nahe beieinander liegenTEXT
.In früheren Versionen von SQL Server konnten Sie nicht
TEXT
direkt auf das zugreifen, sondern nur einTEXTPTR
und es inREADTEXT
undWRITETEXT
Funktionen verwenden.In SQL Server 2005 können Sie direkt auf
TEXT
Spalten zugreifen (obwohl Sie noch eine explizite Umwandlung benötigenVARCHAR
, um ihnen einen Wert zuzuweisen).TEXT
ist gut:VARCHAR
ist gut:Mit Auswahl hier meine ich das Ausgeben von Abfragen, die den Wert der Spalte zurückgeben.
Mit Suche hier meine ich das Abgeben von Abfragen, deren Ergebnis vom Wert der Spalte
TEXT
oder abhängtVARCHAR
. Dazu gehört es in jeder VerwendungJOIN
oderWHERE
Zustand.Da das
TEXT
außerhalb der Zeile gespeichert wird, sind die Abfragen, an denen dieTEXT
Spalte nicht beteiligt ist, normalerweise schneller.Einige Beispiele dafür, wofür
TEXT
es gut ist:Einige Beispiele dafür, wofür
VARCHAR
es gut ist:Als Faustregel gilt: Wenn Sie jemals einen Textwert benötigen, der 200 Zeichen überschreitet , UND in dieser Spalte keinen Join verwenden, verwenden Sie
TEXT
.Andernfalls verwenden
VARCHAR
.PS Gleiches gilt für
UNICODE
aktiviertNTEXT
undNVARCHAR
auch, die Sie für die obigen Beispiele verwenden sollten.PPS Dasselbe gilt für
VARCHAR(MAX)
undNVARCHAR(MAX)
dass SQL Server 2005+ anstelle vonTEXT
und verwendetNTEXT
. Sie müssenlarge value types out of row
sie mit aktivieren ,sp_tableoption
wenn Sie möchten, dass sie immer außerhalb der Zeile gespeichert werden.Wie oben und hier erwähnt ,
TEXT
wird es in zukünftigen Versionen veraltet sein:quelle
In SQL Server 2005 wurden neue Datentypen eingeführt:
varchar(max)
undnvarchar(max)
Sie haben die Vorteile des alten Texttyps: Sie können bis zu 2 GB Daten enthalten, haben aber auch die meisten Vorteile vonvarchar
undnvarchar
. Zu diesen Vorteilen gehört die Möglichkeit, Zeichenfolgenmanipulationsfunktionen wie Teilzeichenfolgen () zu verwenden.Außerdem wird varchar (max) im Speicherplatz der Tabelle (Festplatte / Speicher) gespeichert, während die Größe unter 8 KB liegt. Nur wenn Sie mehr Daten in das Feld einfügen, werden diese außerhalb des Tabellenbereichs gespeichert. Daten, die im Tabellenbereich gespeichert sind, werden (normalerweise) schneller abgerufen.
Kurz gesagt, verwenden Sie niemals Text, da es eine bessere Alternative gibt: (n) varchar (max). Verwenden Sie varchar (max) nur, wenn ein normaler varchar nicht groß genug ist, dh wenn Sie erwarten, dass die zu speichernde Zeichenfolge 8000 Zeichen überschreitet.
Wie bereits erwähnt, können Sie SUBSTRING für den TEXT-Datentyp verwenden, jedoch nur solange die TEXT-Felder weniger als 8000 Zeichen enthalten.
quelle
In ms 2008 wurden einige wichtige Änderungen vorgenommen -> Möglicherweise sollten Sie den folgenden Artikel berücksichtigen, wenn Sie entscheiden, welcher Datentyp verwendet werden soll. http://msdn.microsoft.com/en-us/library/ms143432.aspx
Bytes pro
quelle