J'ai de longueur variable des données de caractère et que vous souhaitez stocker dans SQL Server (2005) de la base de données. Je veux apprendre un certain nombre de meilleures pratiques sur la façon de choisir un TEXTE de type SQL ou choisir VARCHAR type SQL, les avantages et les inconvénients de la performance/encombrement/de fonction.
Réponses
Trop de publicités?TEXT
est utilisé pour les grands morceaux de la chaîne de données. Si la longueur du champ exceeed d'un certain seuil, le texte est stocké hors de la ligne.
VARCHAR
est toujours stocké dans la ligne, et a une limite de 8000 caractères. Si vous essayez de créer un VARCHAR(x)
, où x > 8000, vous obtenez un message d'erreur:
Serveur: Msg 131, Niveau 15, État 3, Ligne 1
La taille (pour le type "varchar" dépasse le maximum autorisé pour n'importe quel type de données (8000)
Ces limitations de longueur ne concernent pas VARCHAR(MAX)
dans SQL Server 2005, qui peuvent être stockés hors de la ligne, tout comme TEXT
.
Notez que MAX
n'est pas une sorte de constante ici, VARCHAR
et VARCHAR(MAX)
sont de types très différents, ces derniers étant très proche de TEXT
.
Dans les versions antérieures de SQL Server, vous ne pouviez pas accéder à l' TEXT
directement, vous ne pourriez obtenir un TEXTPTR
et de l'utiliser en READTEXT
et WRITETEXT
fonctions.
Dans SQL Server 2005 , vous pouvez directement accéder TEXT
colonnes (même si vous avez encore besoin d'un cast explicite VARCHAR
d'attribuer une valeur pour eux).
TEXT
est bon:
- Si vous avez besoin de stocker de grands textes dans votre base de données
- Si vous n'avez pas de recherche sur la valeur de la colonne
- Si vous sélectionnez cette colonne rarement et ne pas se joindre à elle.
VARCHAR
est bon:
- Si vous stockez les ficelles
- Si vous effectuez une recherche sur la chaîne de valeur
- Si vous sélectionnez toujours ou l'utiliser dans les jointures.
En sélectionnant ici, je veux dire d'émettre des requêtes qui retournent la valeur de la colonne.
Par la recherche ici, je veux dire d'émettre des requêtes dont le résultat dépend de la valeur de l' TEXT
ou VARCHAR
colonne. Cela comprend l'utilisation dans n'importe quel JOIN
ou WHERE
condition.
Comme l' TEXT
est stocké hors de la ligne, les requêtes ne comportant pas l' TEXT
colonne sont généralement plus rapides.
Quelques exemples de ce qu' TEXT
est bon pour:
- Les commentaires de ce Blog
- Les pages du Wiki
- Code source
Quelques exemples de ce qu' VARCHAR
est bon pour:
- Les noms d'utilisateur
- Les titres de Page
- Les noms de fichiers
En règle générale, si vous avez besoin de vous valeur de texte dépasser 200 caractères ET ne pas utiliser de rejoindre sur cette colonne, utilisez TEXT
.
Sinon, utilisez VARCHAR
.
P. S. La même chose s'applique UNICODE
permis NTEXT
et NVARCHAR
ainsi que vous devez utiliser pour des exemples ci-dessus.
P. P. S. La même chose s'applique VARCHAR(MAX)
et NVARCHAR(MAX)
que SQL Server 2005+ utilise à la place de TEXT
et NTEXT
. Vous aurez besoin pour activer large value types out of row
avec sp_tableoption
si vous les voulez toujours être stockées hors de la ligne.
Comme mentionné ci-dessus et ici, TEXT
va être obsolète dans les prochaines versions:
L'
text in row
option sera supprimée dans une future version de SQL Server. Évitez d'utiliser cette option dans le développement de nouvelles et plan de modifier les applications qui utilisent actuellementtext in row
. Nous vous recommandons de stocker les données volumineuses à l'aide de l'varchar(max)
,nvarchar(max)
ouvarbinary(max)
types de données. Pour le contrôle en ligne et hors ligne comportement de ces types de données, utilisez l'large value types out of row
option.
Dans SQL server 2005 de nouveaux types de données ont été introduites: varchar(max)
et nvarchar(max)
Ils ont les avantages de l'ancien type de texte: ils peuvent contenir des op à 2 go de données, mais ils ont aussi la plupart des avantages de l' varchar
et nvarchar
. Parmi ces avantages sont la possibilité d'utiliser les fonctions de manipulation de chaîne comme substring().
Aussi, varchar(max) est stocké dans la table (disque/mémoire) de l'espace tandis que la taille est en dessous de 8 ko. Seulement lorsque vous passez plus de données dans le domaine, il est stocké hors de la table de l'espace. Les données stockées dans la table de l'espace de l'est (généralement) récupérés plus rapidement.
En bref, ne jamais utiliser de Texte, car il est une meilleure alternative: (n)varchar(max). Et utiliser uniquement de type varchar(max) lorsqu'un régulier de type varchar n'est pas assez grand, c'est à dire si vous vous attendez à teh chaîne que vous allez stocker permettra de dépasser les 8000 caractères.
Comme l'a noté, vous pouvez utiliser la sous-CHAÎNE sur le type de données TEXTE,mais seulement aussi longtemps que le champs de TEXTE contient moins de 8000 caractères.
Il y a eu des changements majeurs dans la sep 2008 -> Peut-être la peine d'envisager la suite de l'article lors de la prise de décisions sur le type de données à utiliser. http://msdn.microsoft.com/en-us/library/ms143432.aspx
Octets par
- varchar(max), varbinary(max), xml, texte ou image à la colonne 2^31-1 2^31-1
- nvarchar(max) de la colonne 2^30-1 2^30-1