TEXTest 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.
VARCHARest 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 MAXn'est pas une sorte de constante ici, VARCHARet 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 TEXTdirectement, vous ne pourriez obtenir un TEXTPTRet l' utiliser dans READTEXTet WRITETEXTfonctions.
Dans SQL Server 2005, vous pouvez accéder directement aux TEXTcolonnes (bien que vous ayez toujours besoin d'une conversion explicite pour VARCHARleur 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 TEXTou VARCHAR. Cela inclut l' utilisation dans une JOINou WHEREcondition.
Comme le TEXTest stocké hors ligne, les requêtes n'impliquant pas la TEXTcolonne sont généralement plus rapides.
Quelques exemples de ce qui TEXTest bon pour:
- Commentaires du blog
- Pages wiki
- Source de code
Quelques exemples de ce qui VARCHARest 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 à UNICODEactivé NTEXTet NVARCHARainsi, 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 TEXTet NTEXT. Vous devrez les activer large value types out of rowavec sp_tableoptionsi vous souhaitez qu'ils soient toujours stockés hors ligne.
Comme mentionné ci-dessus et ici , TEXTva être déconseillé dans les futures versions:
L' text in rowoption 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 rowoption.