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.
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
etimage
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) .
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:
VARCHAR
est bon:
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:
Quelques exemples de ce que VARCHAR
est bon pour:
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 actuellementtext in row
. Nous vous recommandons de stocker des données volumineuses à l'aide des types de donnéesvarchar(max)
,nvarchar(max)
ouvarbinary(max)
. Pour contrôler le comportement en ligne et hors ligne de ces types de données, utilisez l'optionlarge value types out of row
.
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.
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