TEXTwird 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.
VARCHARwird 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 MAXhier keine Art von Konstante ist VARCHARund VARCHAR(MAX)sehr unterschiedliche Typen sind, wobei letztere sehr nahe beieinander liegen TEXT.
In früheren Versionen von SQL Server konnten Sie nicht TEXTdirekt auf das zugreifen, sondern nur ein TEXTPTRund es in READTEXTund WRITETEXTFunktionen verwenden.
In SQL Server 2005 können Sie direkt auf TEXTSpalten 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 TEXToder abhängt VARCHAR. Dazu gehört es in jeder Verwendung JOINoder WHEREZustand.
Da das TEXTaußerhalb der Zeile gespeichert wird, sind die Abfragen, an denen die TEXTSpalte nicht beteiligt ist, normalerweise schneller.
Einige Beispiele dafür, wofür TEXTes gut ist:
- Blog-Kommentare
- Wiki-Seiten
- Codequelle
Einige Beispiele dafür, wofür VARCHARes 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 UNICODEaktiviert NTEXTund NVARCHARauch, 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 TEXTund verwendet NTEXT. Sie müssen large value types out of rowsie mit aktivieren , sp_tableoptionwenn Sie möchten, dass sie immer außerhalb der Zeile gespeichert werden.
Wie oben und hier erwähnt , TEXTwird es in zukünftigen Versionen veraltet sein:
Die text in rowOption 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 rowOption , um das In-Row- und Out-of-Row-Verhalten dieser Datentypen zu steuern .