text
og ntext
er forældede, så lad os udelade dem et øjeblik. Til det, der er tilbage, er der 3 dimensioner:
- Unicode (UCS-2) vs. ikke-unicode:
N
foran navnet angiver Unicode - Fast længde vs. variabel længde:
var
angiver variabel, ellers fast - In-row vs. BLOB:
(max)
som længde angiver en BLOB, ellers er en in-row værdi
Så med dette kan du læse enhver types betydning:
CHAR(10)
:er en i-række fast længde ikke-Unicode af størrelse 10NVARCHAR(256)
:er en Unicode med variabel længde i rækken med størrelse op til 256VARCHAR(MAX)
:er en BLOB variabel længde ikke-Unicode
De forældede typer text
og ntext
svarer til de nye typer varchar(max)
og nvarchar(max)
hhv.
Når du går til detaljer, betydningen af in-row
vs. BLOB
sløres i små længder, da motoren må optimer lageret og træk en BLOB i rækken eller skub en værdi i rækken ind i den 'lille BLOB' tildelingsenhed, men dette er kun en implementeringsdetalje. Se Tabel- og indeksorganisation
.
Fra et programmeringssynspunkt, alle typer:CHAR
, VARCHAR
, NCHAR
, NVARCHAR
, VARCHAR(MAX)
og NVARCHAR(MAX)
, understøtter en ensartet streng API:String Functions
. Den gamle, forældede, skriver TEXT
og NTEXT
gør ikke understøtter denne API, de har en separat, depereret, TEXT API at manipulere. Du bør ikke bruge de forældede typer.
BLOB-typer understøtter effektive in-place opdateringer ved at bruge UPDATE table SET column.WRITE(@value, @offset)
syntaks.
Forskellen mellem typer med fast længde og variabel længde forsvinder ved rækkekomprimering på et bord. Med rækkekomprimering aktiveret, gemmes faste længdetyper og variabel længde i det samme format, og efterfølgende mellemrum gemmes ikke på disken, se Rækkekomprimeringsimplementering . Bemærk, at sidekomprimering indebærer rækkekomprimering.