text och ntext är utfasade, så låt oss utelämna dem ett ögonblick. För det som är kvar finns det 3 dimensioner:
- Unicode (UCS-2) kontra icke-unicode:
Nframför namnet anger Unicode - Fast längd kontra variabel längd:
varbetecknar variabel, annars fast - I rad kontra BLOB:
(max)eftersom längd anger en BLOB, annars är ett radvärde
Så med detta kan du läsa vilken typ som helst:
CHAR(10):är en rad med fast längd som inte är Unicode av storlek 10NVARCHAR(256):är en Unicode med variabel längd i rad med storlek upp till 256VARCHAR(MAX):är en BLOB variabel längd som inte är Unicode
De föråldrade typerna text och ntext motsvarar de nya typerna varchar(max) och nvarchar(max) respektive.
När du går till detaljer, innebörden av in-row kontra BLOB suddar för små längder eftersom motorn kan optimera lagringen och dra en BLOB i rad eller tryck in ett i-rad-värde till den "lilla BLOB" allokeringsenheten, men detta är bara en implementeringsdetalj. Se tabell- och indexorganisation
.
Ur programmeringssynpunkt, alla typer:CHAR , VARCHAR , NCHAR , NVARCHAR , VARCHAR(MAX) och NVARCHAR(MAX) , stöder ett enhetligt sträng-API:strängfunktioner
. Den gamla, utfasade, skriver TEXT och NTEXT gör inte stöder detta API, de har ett separat, deperated, TEXT API att manipulera. Du bör inte använda de föråldrade typerna.
BLOB-typer stöder effektiva uppdateringar på plats genom att använda UPDATE table SET column.WRITE(@value, @offset) syntax.
Skillnaden mellan typer av fast längd och variabel längd försvinner vid radkomprimering på en tabell. Med radkomprimering aktiverad lagras fasta längdtyper och variabel längd i samma format och efterföljande utrymmen lagras inte på disken, se Implementering av radkomprimering . Observera att sidkomprimering innebär radkomprimering.