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:
N
framför namnet anger Unicode - Fast längd kontra variabel längd:
var
betecknar 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.