text
et ntext
sont obsolètes, alors omettons-les pour un moment. Pour ce qui reste, il y a 3 dimensions :
- Unicode (UCS-2) et non-unicode :
N
devant le nom indique Unicode - Longueur fixe ou longueur variable :
var
indique variable, sinon fixe - In-row contre BLOB :
(max)
car longueur désigne un BLOB, sinon est une valeur dans la ligne
Ainsi, avec ceci, vous pouvez lire la signification de n'importe quel type :
CHAR(10)
:est une ligne non Unicode de longueur fixe de taille 10NVARCHAR(256)
:est un Unicode de longueur variable dans la ligne d'une taille allant jusqu'à 256VARCHAR(MAX)
:est un BLOB de longueur variable non-Unicode
Les types obsolètes text
et ntext
correspondent aux nouveaux types varchar(max)
et nvarchar(max)
respectivement.
Lorsque vous accédez aux détails, la signification de in-row
vs BLOB
brouille sur de petites longueurs car le moteur peut optimisez le stockage et extrayez un BLOB en ligne ou poussez une valeur en ligne dans l'unité d'allocation "petit BLOB", mais il ne s'agit que d'un détail d'implémentation. Voir Organisation des tables et des index
.
D'un point de vue programmation, tous types :CHAR
, VARCHAR
, NCHAR
, NVARCHAR
, VARCHAR(MAX)
et NVARCHAR(MAX)
, prend en charge une API de chaîne uniforme :Fonctions de chaîne
. Les anciens types TEXT
, obsolètes et NTEXT
ne fais pas prennent en charge cette API, ils ont une API TEXT distincte et dépercée à manipuler. Vous ne devez pas utiliser les types obsolètes.
Les types BLOB prennent en charge les mises à jour efficaces sur place en utilisant la UPDATE table SET column.WRITE(@value, @offset)
syntaxe.
La différence entre les types de longueur fixe et de longueur variable disparaît lors de la compression des lignes sur une table. Lorsque la compression de ligne est activée, les types de longueur fixe et de longueur variable sont stockés dans le même format et les espaces de fin ne sont pas stockés sur le disque, voir Mise en œuvre de la compression de lignes . Notez que la compression de page implique la compression de ligne.