Question

J'ai des données de caractères de longueur variable et que vous souhaitez stocker dans la base de données SQL Server (2005). Je veux apprendre des meilleures pratiques sur la façon de choisir le type de texte SQL ou choisissez VARCHAR de type SQL, les avantages et les inconvénients de la performance / encombrement / fonction.

Était-ce utile?

La solution

Si vous utilisez SQL Server 2005 ou version ultérieure, utilisez varchar(MAX). Le type de données text est dépréciée et ne doit pas être utilisé pour de nouveaux travaux de développement. De les docs :

  

Important

     

ntext , text et image types de données seront supprimées dans une future version de Microsoft SQL Server. Évitez d'utiliser ces types de données dans de nouveaux travaux de développement, et un plan pour modifier les applications qui les utilisent actuellement. Utilisez nvarchar (max) , varchar (max) et varbinary (max) place.

Autres conseils

TEXT est utilisé pour de gros morceaux de données de chaîne. Si la longueur du champ exceeed un certain seuil, le texte est stocké sur 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 une erreur:

  

Serveur: Msg 131, niveau 15, état 3, 1 ligne

     

La taille () donnée au type « varchar » dépasse le maximum autorisé pour chaque 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 d'ici constante, VARCHAR et VARCHAR(MAX) sont des types très différents, ce dernier étant très proche de TEXT.

Dans les versions précédentes de SQL Server n'a pas pu accéder au TEXT directement, vous ne pouvez obtenir un TEXTPTR et de l'utiliser dans les fonctions de READTEXT et WRITETEXT.

SQL Server 2005 vous pouvez accéder directement à des colonnes de TEXT (si vous avez encore besoin d'une distribution explicite à VARCHAR d'attribuer une valeur pour eux).

TEXT est bon:

  • Si vous avez besoin de stocker des textes dans votre base de données
  • Si vous ne cherchez pas sur la valeur de la colonne
  • Si vous sélectionnez cette colonne rarement et ne rejoignent pas là-dessus.

VARCHAR est bon:

  • Si vous stockez petites chaînes
  • Si vous effectuez une recherche sur la valeur de chaîne
  • Si vous sélectionnez toujours ou l'utiliser dans les jointures.

Par en sélectionnant ici, je veux dire l'émission des requêtes qui renvoient la valeur de la colonne.

Par recherche ici que je veux dire émettre des requêtes dont le résultat dépend de la valeur de la colonne de TEXT ou VARCHAR. Cela inclut l'utilisation dans toutes les conditions de JOIN ou WHERE.

Comme le TEXT est stocké hors de la ligne, les requêtes ne comportant pas la colonne de TEXT sont généralement plus rapide.

Voici quelques exemples de ce que TEXT est bon pour:

  • blog commentaires
  • pages Wiki
  • Code source

Voici quelques exemples de ce que VARCHAR est bon pour:

  • Usernames
  • titres Page
  • Les noms de fichiers

En règle générale, si vous avez besoin vous valeur de texte à dépasser 200 caractères ne pas utiliser se joindre à cette colonne, utilisez TEXT.

Sinon, utilisez VARCHAR.

P.S. de même pour UNICODE ainsi permis NTEXT et NVARCHAR, que vous devez utiliser pour des exemples ci-dessus.

P.P.S. de même pour VARCHAR(MAX) et NVARCHAR(MAX) que SQL Server 2005 + utilise au lieu de TEXT et NTEXT. Vous devez activer pour les large value types out of row avec sp_tableoption si vous voulez qu'ils soient toujours stockés hors de la ligne.

Comme mentionné ci-dessus et ici , TEXT va être dépréciée dans les versions ultérieures:

  

L'option text in row sera supprimée dans une version future de SQL Server . Évitez d'utiliser cette option dans de nouveaux travaux de développement, et un plan pour modifier les applications qui utilisent actuellement text in row. Nous vous recommandons de stocker des données volumineuses en utilisant les varchar(max), nvarchar(max) ou types de données varbinary(max). Pour commander en ligne et hors-ligne comportement de ces types de données, utilisez l'option large value types out of row.

Dans le serveur SQL 2005 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 op 2 Go de données, mais ils ont aussi la plupart des avantages de varchar et nvarchar. Parmi ces avantages sont la possibilité d'utiliser des fonctions de manipulation de chaînes telles que substring ().

En outre, l'espace varchar (max) est stocké dans (disque / mémoire) de la table alors que la taille est inférieure à 8Kb. Seulement lorsque vous placez plus de données sur le terrain, il est est stocké sur l'espace de la table. Les données stockées dans l'espace de la table est (généralement) récupérés plus rapidement.

En bref, ne jamais utiliser le texte, car il y a une meilleure alternative: (n) varchar (max). Et seulement utiliser varchar (max) lorsqu'un varchar régulier est pas assez grand, à savoir si vous vous attendez Teh chaîne que vous allez stocker dépassera 8000 caractères.

Comme on l'a noté, vous pouvez utiliser SUBSTRING sur le type de données TEXT, mais seulement aussi longtemps les champs de texte contient moins de 8000 caractères.

Il y a eu des changements majeurs dans ms 2008 -> peut être utile d'examiner l'article suivant pour prendre une décision sur ce type de données à utiliser. http://msdn.microsoft.com/en-us/library/ms143432.aspx

Octets par

  1. varchar (max), varbinary (max), xml, text ou colonne de l'image 2 ^ 31-1 ^ 31-1 2
  2. nvarchar (max) colonne 2 ^ 30-1 ^ 30-1 2
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top