TEXT
wird für große Zeichenfolgendaten verwendet. Wenn die Länge des Feldes einen bestimmten Schwellenwert überschreitet, wird der Text außerhalb der Zeile gespeichert.
VARCHAR
wird immer in Reihe gespeichert und hat ein Limit von 8000 Figuren. Wenn Sie versuchen, ein VARCHAR(x)
zu erstellen , wobei x> 8000 , erhalten Sie eine Fehlermeldung:
Server:Nachricht 131, Ebene 15, Status 3, Zeile 1
Die dem Typ „varchar“ zugewiesene Größe () überschreitet das für jeden Datentyp zulässige Maximum (8000)
Diese Längenbeschränkungen betreffen nicht VARCHAR(MAX)
in SQL Server 2005 , die außerhalb der Zeile gespeichert werden können, genau wie TEXT
.
Beachten Sie, dass MAX
ist hier keine Art Konstante, VARCHAR
und VARCHAR(MAX)
sind sehr unterschiedliche Typen, wobei letztere sehr nahe an TEXT
liegen .
In früheren Versionen von SQL Server Sie konnten nicht auf TEXT
zugreifen direkt, Sie könnten nur einen TEXTPTR
erhalten und verwenden Sie es in READTEXT
und WRITETEXT
Funktionen.
In SQL Server 2005 Sie können direkt auf TEXT
zugreifen Spalten (obwohl Sie immer noch eine explizite Umwandlung in VARCHAR
benötigen 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 ihr nicht beitreten.
VARCHAR
ist gut:
- Wenn Sie kleine Zeichenfolgen speichern
- Wenn Sie nach dem Zeichenfolgenwert suchen
- Wenn Sie es immer auswählen oder in Joins verwenden.
Durch Auswählen hier meine ich das Ausgeben von Abfragen, die den Wert der Spalte zurückgeben.
Durch Suchen hier meine ich das Ausgeben von Abfragen, deren Ergebnis vom Wert des TEXT
abhängt oder VARCHAR
Säule. Dies schließt die Verwendung in jedem JOIN
ein oder WHERE
Zustand.
Als TEXT
wird außerhalb der Zeile gespeichert, die Abfragen beinhalten nicht den TEXT
-Spalten sind in der Regel schneller.
Einige Beispiele für TEXT
ist gut für:
- Blogkommentare
- Wiki-Seiten
- Codequelle
Einige Beispiele für VARCHAR
ist gut für:
- Benutzernamen
- Seitentitel
- Dateinamen
Als Faustregel gilt, wenn Sie jemals einen Textwert benötigen, der 200 übersteigt Zeichen UND Verwenden Sie für diese Spalte kein Join, verwenden Sie TEXT
.
Verwenden Sie andernfalls VARCHAR
.
P.S. Gleiches gilt für UNICODE
aktiviert NTEXT
und NVARCHAR
auch, die Sie für die obigen Beispiele verwenden sollten.
P.P.S. Dasselbe gilt für VARCHAR(MAX)
und NVARCHAR(MAX)
dass SQL Server 2005+ verwendet statt TEXT
und NTEXT
. Sie müssen large value types out of row
aktivieren für sie mit sp_tableoption
wenn Sie möchten, dass sie immer außerhalb der Reihe gespeichert werden.
Wie oben und hier erwähnt , TEXT
wird in zukünftigen Versionen veraltet sein:
Der text in row
Option wird in einer zukünftigen Version von SQL Server entfernt . Vermeiden Sie die Verwendung dieser Option bei neuen Entwicklungsarbeiten und planen Sie, Anwendungen zu ändern, die derzeit text in row
verwenden . Wir empfehlen, große Datenmengen mit varchar(max)
zu speichern , nvarchar(max)
, oder varbinary(max)
Datentypen. Um das In-Row- und Out-of-Row-Verhalten dieser Datentypen zu steuern, verwenden Sie die large value types out of row
Option.