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:
Nforan navnet angiver Unicode - Fast længde vs. variabel længde:
varangiver 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.