web-dev-qa-db-fra.com

Type de texte SQL Server et type de données varchar

J'ai des données de caractères de longueur variable et je souhaite les stocker dans la base de données SQL Server (2005). Je souhaite connaître les meilleures pratiques pour choisir le type de texte SQL TEXT ou choisir le type de VARCHAR SQL, avantages et inconvénients des performances/de l'empreinte/de la fonction.

281
George2

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

Important

ntext, text et image les types de données seront supprimés à l'avenir version de Microsoft SQL Server. Évitez d'utiliser ces types de données dans les nouveaux travaux de développement et prévoyez de modifier les applications qui les utilisent actuellement. Utilisez nvarchar (max) , varchar (max) et varbinary (max) .

203
Mladen Prajdic

TEXT est utilisé pour les gros morceaux de données de chaîne. Si la longueur du champ dépasse un certain seuil, le texte est stocké hors ligne.

VARCHAR est toujours stocké dans une ligne et a une limite de 8000 caractères. Si vous essayez de créer une VARCHAR(x), où x> 8000 , vous obtenez une erreur:

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

La taille () donnée au type 'varchar' dépasse le maximum autorisé pour tout type de données (8000)

Ces limitations de longueur ne concernent pas VARCHAR(MAX) in SQL Server 2005 , qui peuvent être stockées hors ligne, tout comme TEXT.

Notez que MAX n'est pas une sorte de constante ici, VARCHAR et VARCHAR(MAX) sont des types très différents, ces derniers étant très proches de TEXT.

Dans les versions précédentes de SQL Server , vous ne pouviez pas accéder directement à TEXT, vous ne pouviez obtenir qu'un TEXTPTR et l'utiliser dans READTEXT et WRITETEXT fonctions.

Dans SQL Server 2005 , vous pouvez accéder directement aux colonnes TEXT (bien que vous ayez toujours besoin d'une conversion explicite en VARCHAR pour leur attribuer une valeur).

TEXT est bon:

  • Si vous devez stocker des textes volumineux dans votre base de données
  • Si vous ne cherchez pas sur la valeur de la colonne
  • Si vous sélectionnez rarement cette colonne et ne vous y joignez pas.

VARCHAR est bon:

  • Si vous stockez de petites ficelles
  • Si vous recherchez sur la valeur de la chaîne
  • Si vous le sélectionnez toujours ou si vous l’utilisez dans des jointures.

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

Par recherche , je veux dire émettre toutes les requêtes dont le résultat dépend de la valeur de la colonne TEXT ou VARCHAR. Cela inclut son utilisation dans n'importe quelle condition JOIN ou WHERE.

Comme la variable TEXT est stockée hors ligne, les requêtes n'impliquant pas la colonne TEXT sont généralement plus rapides.

Quelques exemples de ce que TEXT est bon pour:

  • Commentaires du blog
  • Pages wiki
  • Code source

Quelques exemples de ce que VARCHAR est bon pour:

  • Noms d'utilisateur
  • Titres de page
  • Noms de fichiers

En règle générale, si vous avez besoin que votre texte dépasse 200 caractères ET n'utilisez pas join sur cette colonne, utilisez TEXT.

Sinon, utilisez VARCHAR.

P.S. Il en va de même pour UNICODE enabled NTEXT et NVARCHAR, que vous devriez utiliser pour les exemples ci-dessus.

PPS Il en va de même pour VARCHAR(MAX) et NVARCHAR(MAX) que SQL Server 2005 + utilise à la place de TEXT et NTEXT. Vous devez activer large value types out of row pour eux avec sp_tableoption si vous voulez qu'ils soient toujours stockés en dehors de la ligne.

Comme mentionné ci-dessus et ici , TEXT sera obsolète dans les prochaines versions:

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

277
Quassnoi

Dans SQL Server 2005, de nouveaux types de données ont été introduits: varchar(max) et nvarchar(max) ils présentent les avantages de l'ancien type de texte: ils peuvent contenir jusqu'à 2 Go de données, mais ils ont également la plupart des avantages de varchar et nvarchar. Parmi ces avantages, il y a la possibilité d'utiliser des fonctions de manipulation de chaînes telles que substring ().

De plus, varchar (max) est stocké dans l'espace de la table (disque/mémoire) lorsque la taille est inférieure à 8 Ko. Ce n'est que lorsque vous placez plus de données dans le champ que celles-ci sont stockées en dehors de l'espace de la table. Les données stockées dans l'espace de la table sont (généralement) récupérées plus rapidement.

En bref, n'utilisez jamais Text, car il existe une meilleure alternative: (n) varchar (max). Et utilisez uniquement varchar (max) lorsqu'un varchar standard n'est pas assez grand, c'est-à-dire si vous vous attendez à ce que la chaîne que vous allez stocker dépasse 8 000 caractères.

Comme indiqué précédemment, vous pouvez utiliser SUBSTRING sur le type de données TEXT, mais uniquement si les champs TEXT contiennent moins de 8 000 caractères.

39
edosoft

Il y a eu quelques changements majeurs dans ms 2008 -> Il serait peut-être intéressant de considérer l'article suivant pour décider du type de données à utiliser. http://msdn.Microsoft.com/en-us/library/ms143432.aspx

Octets par

  1. varchar (max), varbinary (max), xml, texte ou colonne d'image 2 ^ 31-1 2 ^ 31-1
  2. nvarchar (max) colonne 2 ^ 30-1 2 ^ 30-1
7
Draz