sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server Texttyp kontra varchar datatyp

TEXT används för stora bitar av strängdata. Om längden på fältet överstiger en viss tröskel, lagras texten utanför rad.

VARCHAR lagras alltid i rad och har en gräns på 8000 tecken. Om du försöker skapa en VARCHAR(x) , där x> 8000 , får du ett felmeddelande:

Server:Msg 131, Level 15, State 3, Line 1

Storleken () som ges till typen "varchar" överskrider det maximalt tillåtna för alla datatyper (8000)

Dessa längdbegränsningar gäller inte VARCHAR(MAX) i SQL Server 2005 , som kan lagras utanför rad, precis som TEXT .

Observera att MAX är inte en slags konstant här, VARCHAR och VARCHAR(MAX) är väldigt olika typer, de senare är mycket nära TEXT .

I tidigare versioner av SQL Server du kunde inte komma åt TEXT direkt kunde du bara få en TEXTPTR och använd den i READTEXT och WRITETEXT funktioner.

I SQL Server 2005 du kan komma direkt åt TEXT kolumner (även om du fortfarande behöver en explicit cast till VARCHAR för att tilldela ett värde för dem).

TEXT är bra:

  • Om du behöver lagra stora texter i din databas
  • Om du inte söker på värdet på kolumnen
  • Om du sällan väljer den här kolumnen och inte går med i den.

VARCHAR är bra:

  • Om du lagrar små snören
  • Om du söker på strängvärdet
  • Om du alltid väljer det eller använder det i joins.

Genom att välja här menar jag att skicka alla frågor som returnerar värdet på kolumnen.

Genom att söka här menar jag att skicka alla frågor vars resultat beror på värdet på TEXT eller VARCHAR kolumn. Detta inkluderar att använda den i valfri JOIN eller WHERE skick.

Som TEXT lagras utanför rad, frågorna som inte involverar TEXT kolumner är vanligtvis snabbare.

Några exempel på vad TEXT är bra för:

  • Bloggkommentarer
  • Wiki-sidor
  • Kodkälla

Några exempel på vad VARCHAR är bra för:

  • Användarnamn
  • Sidtitlar
  • Filnamn

Som en tumregel, om du någonsin behöver ditt textvärde överstiga 200 tecken OCH använd inte join i den här kolumnen, använd TEXT .

Använd annars VARCHAR .

P.S. Detsamma gäller för UNICODE aktiverad NTEXT och NVARCHAR också, som du bör använda som exempel ovan.

P.P.S. Detsamma gäller för VARCHAR(MAX) och NVARCHAR(MAX) att SQL Server 2005+ använder istället för TEXT och NTEXT . Du måste aktivera large value types out of row för dem med sp_tableoption om du vill att de alltid ska lagras utanför raden.

Som nämnts ovan och här , TEXT kommer att fasas ut i framtida utgåvor:

text in row alternativet kommer att tas bort i en framtida version av SQL Server . Undvik att använda det här alternativet i nytt utvecklingsarbete och planera för att modifiera applikationer som för närvarande använder text in row . Vi rekommenderar att du lagrar stora data genom att använda varchar(max) , nvarchar(max) , eller varbinary(max) datatyper. För att kontrollera beteendet i rad och utanför rad för dessa datatyper, använd large value types out of row alternativ.



  1. PostgreSQL, komplex fråga för att beräkna ingredienser efter recept

  2. Ska jag indexera ett bitfält i SQL Server?

  3. Flera uppdateringar i MySQL

  4. Hur väljer jag en hel rad som har det största ID:t i tabellen?