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 erstellen VARCHAR(x)
, wobei x> 8000 ist, wird eine Fehlermeldung angezeigt:
Server: Nachricht 131, Ebene 15, Status 3, Zeile 1
Die Größe () für den Typ 'varchar' überschreitet den maximal zulässigen Wert für einen Datentyp (8000).
Diese Längenbeschränkungen betreffen nicht VARCHAR(MAX)
in SQL Server 2005 , die der Zeile gespeichert werden kann, genau wie TEXT
.
Beachten Sie, dass dies MAX
hier keine Art von Konstante ist VARCHAR
und VARCHAR(MAX)
sehr unterschiedliche Typen sind, wobei letztere sehr nahe beieinander liegen TEXT
.
In früheren Versionen von SQL Server konnten Sie nicht TEXT
direkt auf das zugreifen, sondern nur ein TEXTPTR
und es in READTEXT
und WRITETEXT
Funktionen verwenden.
In SQL Server 2005 können Sie direkt auf TEXT
Spalten zugreifen (obwohl Sie noch eine explizite Umwandlung benötigen VARCHAR
, um ihnen einen Wert zuzuweisen).
TEXT
ist gut:
- Wenn Sie große Texte in Ihrer Datenbank speichern müssen
- Wenn Sie nicht nach dem Wert der Spalte suchen
- Wenn Sie diese Spalte selten auswählen und nicht beitreten.
VARCHAR
ist gut:
- Wenn Sie kleine Schnüre speichern
- Wenn Sie nach dem Zeichenfolgenwert suchen
- Wenn Sie es immer auswählen oder in Joins verwenden.
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ängt VARCHAR
. Dazu gehört es in jeder Verwendung JOIN
oder WHERE
Zustand.
Da das TEXT
außerhalb der Zeile gespeichert wird, sind die Abfragen, an denen die TEXT
Spalte nicht beteiligt ist, normalerweise schneller.
Einige Beispiele dafür, wofür TEXT
es gut ist:
- Blog-Kommentare
- Wiki-Seiten
- Codequelle
Einige Beispiele dafür, wofür VARCHAR
es gut ist:
- Benutzernamen
- Seitentitel
- Dateinamen
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
aktiviert NTEXT
und NVARCHAR
auch, die Sie für die obigen Beispiele verwenden sollten.
PPS Dasselbe gilt für VARCHAR(MAX)
und NVARCHAR(MAX)
dass SQL Server 2005+ anstelle von TEXT
und verwendet NTEXT
. Sie müssen large 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:
Die text in row
Option wird in einer zukünftigen Version von SQL Server entfernt . Vermeiden Sie die Verwendung dieser Option in neuen Entwicklungsarbeiten und planen Sie, derzeit verwendete Anwendungen zu ändern text in row
. Wir empfehlen Ihnen , große Daten speichern , indem Sie die varchar(max)
, nvarchar(max)
oder varbinary(max)
Datentypen. Verwenden Sie die large value types out of row
Option , um das In-Row- und Out-of-Row-Verhalten dieser Datentypen zu steuern .