304 votes

SQL Server type de Texte vs type de données varchar

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.

296voto

Quassnoi Points 191041

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 actuellement text in row. Nous vous recommandons de stocker les données volumineuses à l'aide de l' varchar(max), nvarchar(max)ou varbinary(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.

233voto

Mladen Prajdic Points 10337

si vous utilisez SQL Server 2005 l'utilisation de type varchar(MAX). Type de données texte est obsolète et ne doit pas être utilisé pour de nouveaux travaux de développement.

46voto

edosoft Points 7783

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.

7voto

Draz Points 59

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

  1. varchar(max), varbinary(max), xml, texte ou image à la colonne 2^31-1 2^31-1
  2. nvarchar(max) de la colonne 2^30-1 2^30-1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X