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 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, 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 peuvent être stockés hors de la ligne, tout comme TEXT
.
Notez que ce MAX
n'est pas une sorte de constante ici, VARCHAR
et ce VARCHAR(MAX)
sont des types très différents, ce dernier étant très proche TEXT
.
Dans les versions précédentes de SQL Server , vous ne pouviez pas accéder au TEXT
directement, vous ne pourriez obtenir un TEXTPTR
et l' utiliser dans READTEXT
et WRITETEXT
fonctions.
Dans SQL Server 2005, vous pouvez accéder directement aux TEXT
colonnes (bien que vous ayez toujours besoin d'une conversion explicite pour VARCHAR
leur attribuer une valeur).
TEXT
est bon:
- Si vous avez besoin de stocker de gros textes dans votre base de données
- Si vous ne recherchez pas 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 cordes
- Si vous recherchez la valeur de chaîne
- Si vous le sélectionnez toujours ou l'utilisez dans des 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 toutes les requêtes dont le résultat dépend de la valeur de la colonne TEXT
ou VARCHAR
. Cela inclut l' utilisation dans une JOIN
ou WHERE
condition.
Comme le TEXT
est stocké hors ligne, les requêtes n'impliquant pas la TEXT
colonne sont généralement plus rapides.
Quelques exemples de ce qui TEXT
est bon pour:
- Commentaires du blog
- Pages wiki
- Source de code
Quelques exemples de ce qui VARCHAR
est bon pour:
- Noms d'utilisateur
- Titres de page
- Noms de fichiers
En règle générale, si vous avez besoin d'une valeur de texte supérieure à 200 caractères ET que vous n'utilisez pas de jointure dans cette colonne, utilisez TEXT
.
Sinon, utilisez VARCHAR
.
PS La même chose s'applique à UNICODE
activé NTEXT
et NVARCHAR
ainsi, que vous devez utiliser pour les exemples ci-dessus.
PPS La même chose s'applique à VARCHAR(MAX)
et NVARCHAR(MAX)
que SQL Server 2005+ utilise à la place de TEXT
et NTEXT
. Vous devrez les activer large value types out of row
avec sp_tableoption
si vous souhaitez qu'ils soient toujours stockés hors ligne.
Comme mentionné ci-dessus et ici , TEXT
va être déconseillé dans les futures versions:
L' text in row
option 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 actuellementtext in row
. Nous vous recommandons de stocker des données volumineuses en utilisant les varchar(max)
, nvarchar(max)
ou les varbinary(max)
types de données. Pour contrôler le comportement en ligne et hors ligne de ces types de données, utilisez l' large value types out of row
option.