Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server-Texttyp vs. varchar-Datentyp

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.