Différence entre les différents types de chaînes de caractères dans SQL Server?
Quelle est la différence entre char
,nchar
,ntext
, nvarchar
,text
et varchar
en SQL?
Est-il vraiment un cas d'application pour chacun de ces types, ou certains d'entre eux seulement obsolète?
9 réponses
text
et ntext
sont dépréciés, alors laissons-les de côté un moment. Pour ce qui reste, il y a 3 dimensions:
- Unicode (UCS-2) vs. non-unicode:
N
devant le nom indique Unicode - longueur fixe vs. longueur variable:
var
indique variable, autrement fixe - En-ligne vs BLOB:
(max)
comme la longueur dénote une tache, autrement est une valeur en ligne
donc avec ceci, vous pouvez lire la signification de n'importe quel type:
CHAR(10)
: est un en-ligne de longueur fixe de la non-Unicode de taille 10NVARCHAR(256)
: est un Unicode de longueur variable en ligne de taille jusqu'à 256VARCHAR(MAX)
: est-ce une GOUTTE de longueur variable non-Unicode
Le obsolète types text
et ntext
correspondent aux nouveaux types varchar(max)
et nvarchar(max)
respectivement.
quand vous allez aux détails, le sens de in-row
vs. BLOB
floue pour de petites longueurs comme le moteur optimiser le stockage et tirer une BLOB en ligne ou pousser une valeur en ligne dans l'unité d'allocation 'small BLOB', mais ce n'est qu'un détail d'implémentation. Voir Table des Index et de l'Organisation.
du point de vue de la programmation, tous les types:CHAR
,VARCHAR
,NCHAR
,NVARCHAR
,VARCHAR(MAX)
et NVARCHAR(MAX)
, le soutien d'un uniforme de la chaîne d'API: Fonctions De Chaîne De Caractères. Le vieux, obsolète, types TEXT
et NTEXT
supportez cette API, ils ont une API de texte séparée et dépérée à manipuler. Vous ne devez pas utiliser les types dépréciés.
les types de BLOB supportent efficacement les mises à jour en place en utilisant le UPDATE table SET column.WRITE(@value, @offset)
syntaxe.
la différence entre les types de longueur fixe et de longueur variable disparaît lorsque la compression de ligne sur une table. Avec la compression de ligne activée, les types de longueur fixe et la longueur variable sont stockés dans le même format et les espaces de fuite ne sont pas stockés sur le disque, voir Ligne Mise En Œuvre De La Compression. Notez que la compression de page implique la compression de ligne.
- 'n ' représente la prise en charge des caractères unicode.
- char - spécifie une chaîne avec un stockage de longueur fixe. Espace alloué avec ou sans données présentes.
- varchar - longueur Variable de stockage. L'espace est alloué autant que la longueur de données dans la colonne.
- texte - pour stocker d'énormes données. L'espace alloué est de 16 octets pour le stockage en colonne.
en plus-texte et texte ont été dépréciés pour varchar (max) et nvarchar(max)
text
et ntext
deprecated en faveur de varchar(max)
et nvarchar(max)
le préfixe n signifie simplement Unicode. Les types "n" fonctionnent de la même manière que les versions simples, sauf qu'ils fonctionnent avec du texte Unicode.
char est un champ de longueur fixe. Ainsi char (10) rempli de "Oui" prendra toujours 10 octets de stockage.
varchar est un champ de longueur variable. char (10) rempli avec "Yes" prendra 5 octets de stockage (il y a un overhead de 2 octets pour utiliser les types de données var).
char (n) Chaîne de longueur x. Stockage = n octet. varchar (n) Chaîne de maintien de longueur X. Stockage = x + 2 octets.
vchar et nvarchar sont similaires sauf qu'il est de 2 Octets par caractère.
en général, vous ne devez utiliser char & char (over varchar & nvarchar) que lorsque vous travaillez avec des chaînes fixes ou semi-fixes. Un bon exemple serait un product_code ou user_type qui est toujours long de n caractères.
vous ne devez pas utiliser de texte (ou de ntext) car il a été déprécié. varchar(max) et de type nvarchar(max) fournit la même fonctionnalité.
N
le préfixe indique le support unicode et prend deux fois les octets par caractère de non-unicode.
Varchar
est une longueur variable. Vous utilisez un 2 octets supplémentaires par champ pour stocker la longueur.
Char
est de longueur fixe. Si vous savez combien de temps vos données, utilisez char
comme vous vous en économiser des octets!
Text
est plutôt déprécié d'après mon expérience.
méfiez-vous de l'aide de Varchar(max)
et NVarchar(max)
que ces champs ne peuvent pas être indexées.
Je ne connais qu'entre "char"et " varchar".
char: il peut allouer de la mémoire de taille spécifiée qu'elle soit remplie ou non
varchar: il attribuera la mémoire en fonction du nombre de caractères qu'il contient mais il devrait avoir une certaine taille appelée taille maximale.
le Texte est destiné à de très grandes quantités de texte, et n'est pas destiné à être consultable (mais peut être dans certaines circonstances. Il sera lent de toute façon).
les types de données char/nchar sont de longueurs fixes, et sont capitonnés si les données entrées sont plus courtes, par opposition aux types varchar/nvarchar, qui sont de longueur variable.
les types n ont le support unicode, alors que les types non-n n'en ont pas.
le Texte est obsolète.
Char est une valeur définie. Quand vous dites char(10), vous réservant 10 caractères pour chaque ligne, qu'ils soient utilisés ou non. Utilisez ceci pour quelque chose qui ne devrait pas changer de longueurs (par exemple, Code postal ou SSN)
varchar est variable. Quand vous dites varchar (10), 2 octets sont mis de côté pour stocker la taille des données, ainsi que les données réelles (qui pourraient être seulement disons, quatre octets).
le N représente le code uni. Deux fois la espace.
préfixe n: unicode. var*: longueur variable, le reste est de longueur fixe.
tous les types de données sont corrects et agréables... documenter.
Comme ici:
http://msdn.microsoft.com/en-us/library/ms187752.aspx
Est-il vraiment un cas d'application pour chacun de ces types, ou sont certains juste obsolète?
Non, il y a un bon dossier pour chacun d'eux.