Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

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

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é en ligne et a une limite de 8000 personnages. Si vous essayez de créer un 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) dans SQL Server 2005 , qui peut être stocké hors 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 proches de TEXT .

Dans les versions antérieures de SQL Server vous n'avez pas pu accéder au TEXT directement, vous ne pouviez obtenir qu'un TEXTPTR et utilisez-le dans READTEXT et WRITETEXT fonctions.

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

TEXT est bon :

  • Si vous avez besoin de 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 que vous ne la rejoignez pas.

VARCHAR est bon :

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

En sélectionnant ici, je veux dire émettre toutes les requêtes qui renvoient la valeur de la colonne.

En recherchant ici, je veux dire émettre toute requête dont le résultat dépend de la valeur du TEXT ou VARCHAR colonne. Cela inclut son utilisation dans n'importe quel JOIN ou WHERE état.

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

Quelques exemples de ce que TEXT est bon pour :

  • Commentaires du blog
  • Pages wiki
  • Source du code

Quelques exemples de ce que VARCHAR est bon pour :

  • Noms d'utilisateur
  • Titres des pages
  • Noms de fichiers

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

Sinon, utilisez VARCHAR .

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

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

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

Le text in row l'option sera supprimée dans une future version de SQL Server . Évitez d'utiliser cette option dans de 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 en utilisant le varchar(max) , nvarchar(max) , ou varbinary(max) Types de données. Pour contrôler le comportement en ligne et hors ligne de ces types de données, utilisez les large value types out of row option.