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ändertext in row
. Vi rekommenderar att du lagrar stora data genom att användavarchar(max)
,nvarchar(max)
, ellervarbinary(max)
datatyper. För att kontrollera beteendet i rad och utanför rad för dessa datatyper, användlarge value types out of row
alternativ.