text
en ntext
zijn verouderd, dus laten we ze even weglaten. Voor wat overblijft, zijn er 3 dimensies:
- Unicode (UCS-2) versus niet-unicode:
N
voor de naam staat voor Unicode - Vaste lengte vs. variabele lengte:
var
geeft variabele aan, anders vast - In-rij vs. BLOB:
(max)
omdat lengte een BLOB aangeeft, anders is het een waarde in de rij
Dus hiermee kun je de betekenis van elk type lezen:
CHAR(10)
:is een in-rij vaste lengte niet-Unicode van maat 10NVARCHAR(256)
:is een in-rij variabele lengte Unicode met een grootte tot 256VARCHAR(MAX)
:is een BLOB variabele lengte niet-Unicode
De verouderde typen text
en ntext
komen overeen met de nieuwe typen varchar(max)
en nvarchar(max)
respectievelijk.
Wanneer je naar details gaat, de betekenis van in-row
vs. BLOB
vervaagt voor kleine lengtes zoals de motor mogelijk optimaliseer de opslag en trek een BLOB in-row of push een in-row-waarde in de 'kleine BLOB'-toewijzingseenheid, maar dit is slechts een implementatiedetail. Zie Tabel- en indexorganisatie
.
Vanuit een programmeringsoogpunt, alle typen:CHAR
, VARCHAR
, NCHAR
, NVARCHAR
, VARCHAR(MAX)
en NVARCHAR(MAX)
, ondersteunt een uniforme string-API:String-functies
. De oude, verouderde typen TEXT
en NTEXT
doe niet deze API ondersteunen, hebben ze een aparte, deperated, TEXT API om te manipuleren. Gebruik de verouderde typen niet.
BLOB-typen ondersteunen efficiënte interne updates door gebruik te maken van de UPDATE table SET column.WRITE(@value, @offset)
syntaxis.
Het verschil tussen typen met vaste lengte en variabele lengte verdwijnt wanneer rijcompressie op een tafel. Als rijcompressie is ingeschakeld, worden typen met vaste lengte en variabele lengte in hetzelfde formaat opgeslagen en worden volgspaties niet op schijf opgeslagen, zie Implementatie rijcompressie . Merk op dat paginacompressie rij-compressie impliceert.