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 actuellementtext in row
. Nous vous recommandons de stocker des données volumineuses en utilisant levarchar(max)
,nvarchar(max)
, ouvarbinary(max)
Types de données. Pour contrôler le comportement en ligne et hors ligne de ces types de données, utilisez leslarge value types out of row
option.