TEXT
bruges til store stykker strengdata. Hvis længden af feltet overstiger en vis grænse, gemmes teksten uden for rækken.
VARCHAR
er altid gemt i rækker og har en grænse på 8000 tegn. Hvis du prøver at oprette en VARCHAR(x)
, hvor x> 8000 , får du en fejlmeddelelse:
Server:Msg 131, Level 15, State 3, Line 1
Størrelsen () givet til typen "varchar" overstiger det maksimalt tilladte for enhver datatype (8000)
Disse længdebegrænsninger vedrører ikke VARCHAR(MAX)
i SQL Server 2005 , som kan gemmes uden for rækken, ligesom TEXT
.
Bemærk, at MAX
er ikke en slags konstant her, VARCHAR
og VARCHAR(MAX)
er meget forskellige typer, hvor sidstnævnte er meget tæt på TEXT
.
I tidligere versioner af SQL Server du kunne ikke få adgang til TEXT
direkte kunne du kun få en TEXTPTR
og brug det i READTEXT
og WRITETEXT
funktioner.
I SQL Server 2005 du kan få direkte adgang til TEXT
kolonner (selvom du stadig har brug for en eksplicit cast til VARCHAR
for at tildele dem en værdi).
TEXT
er godt:
- Hvis du skal gemme store tekster i din database
- Hvis du ikke søger på værdien af kolonnen
- Hvis du sjældent vælger denne kolonne og ikke deltager i den.
VARCHAR
er godt:
- Hvis du gemmer små snore
- Hvis du søger på strengværdien
- Hvis du altid vælger det eller bruger det i joins.
Ved at vælge her mener jeg at udstede forespørgsler, der returnerer værdien af kolonnen.
Ved at søge her mener jeg at udstede forespørgsler, hvis resultat afhænger af værdien af TEXT
eller VARCHAR
kolonne. Dette inkluderer brug af det i enhver JOIN
eller WHERE
tilstand.
Som TEXT
er gemt uden for rækken, forespørgslerne involverer ikke TEXT
kolonne er normalt hurtigere.
Nogle eksempler på hvad TEXT
er god til:
- Blogkommentarer
- Wiki-sider
- Kodekilde
Nogle eksempler på hvad VARCHAR
er god til:
- Brugernavne
- Sidetitler
- Filnavne
Som en tommelfingerregel, hvis du nogensinde har brug for, at din tekstværdi overstiger 200 tegn OG brug ikke join på denne kolonne, brug TEXT
.
Ellers brug VARCHAR
.
P.S. Det samme gælder for UNICODE
aktiveret NTEXT
og NVARCHAR
også, som du bør bruge til eksempler ovenfor.
P.P.S. Det samme gælder for VARCHAR(MAX)
og NVARCHAR(MAX)
at SQL Server 2005+ bruger i stedet for TEXT
og NTEXT
. Du skal aktivere large value types out of row
for dem med sp_tableoption
hvis du vil have dem altid gemt uden for rækken.
Som nævnt ovenfor og her , TEXT
vil blive udfaset i fremtidige udgivelser:
text in row
vil blive fjernet i en fremtidig version af SQL Server . Undgå at bruge denne mulighed i nyt udviklingsarbejde, og planlæg at ændre applikationer, der i øjeblikket bruger text in row
. Vi anbefaler, at du gemmer store data ved at bruge varchar(max)
, nvarchar(max)
, eller varbinary(max)
datatyper. Brug large value types out of row
for at kontrollere opførsel i række og ud af række af disse datatyper mulighed.