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 veux apprendre quelques bonnes pratiques sur la façon de choisir le type SQL TEXT ou choisir le type SQL VARCHAR, les avantages et les inconvénients en termes de performances / d'encombrement / de fonction.
sql-server
text
varchar
sqldatatypes
George2
la source
la source
Réponses:
Si vous utilisez SQL Server 2005 ou version ultérieure, utilisez
varchar(MAX)
. Letext
type de données est obsolète et ne doit pas être utilisé pour de nouveaux travaux de développement. De la documentation :la source
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 unVARCHAR(x)
, où x> 8000 , vous obtenez une erreur:Ces limitations de longueur ne concernent pas
VARCHAR(MAX)
dans SQL Server 2005 , qui peuvent être stockés hors de la ligne, tout commeTEXT
.Notez que ce
MAX
n'est pas une sorte de constante ici,VARCHAR
et ceVARCHAR(MAX)
sont des types très différents, ce dernier étant très procheTEXT
.Dans les versions précédentes de SQL Server , vous ne pouviez pas accéder au
TEXT
directement, vous ne pourriez obtenir unTEXTPTR
et l' utiliser dansREADTEXT
etWRITETEXT
fonctions.Dans SQL Server 2005, vous pouvez accéder directement aux
TEXT
colonnes (bien que vous ayez toujours besoin d'une conversion explicite pourVARCHAR
leur attribuer une valeur).TEXT
est bon:VARCHAR
est bon: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
ouVARCHAR
. Cela inclut l' utilisation dans uneJOIN
ouWHERE
condition.Comme le
TEXT
est stocké hors ligne, les requêtes n'impliquant pas laTEXT
colonne sont généralement plus rapides.Quelques exemples de ce qui
TEXT
est bon pour:Quelques exemples de ce qui
VARCHAR
est bon pour: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
etNVARCHAR
ainsi, que vous devez utiliser pour les exemples ci-dessus.PPS La même chose s'applique à
VARCHAR(MAX)
etNVARCHAR(MAX)
que SQL Server 2005+ utilise à la place deTEXT
etNTEXT
. Vous devrez les activerlarge value types out of row
avecsp_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:la source
Dans SQL Server 2005, de nouveaux types de données ont été introduits:
varchar(max)
etnvarchar(max)
Ils ont les avantages de l'ancien type de texte: ils peuvent contenir op à 2 Go de données, mais ils ont également la plupart des avantages devarchar
etnvarchar
. Parmi ces avantages, il y a la possibilité d'utiliser des fonctions de manipulation de chaînes telles que substring ().En outre, varchar (max) est stocké dans l'espace (disque / mémoire) de la table tandis que la taille est inférieure à 8 Ko. Ce n'est que lorsque vous placez plus de données dans le champ, qu'elles sont stockées hors 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 n'utilisez varchar (max) que si un varchar normal n'est pas assez grand, c'est-à-dire si vous vous attendez à ce que la chaîne que vous allez stocker dépasse 8000 caractères.
Comme indiqué précédemment, vous pouvez utiliser SUBSTRING sur le type de données TEXT, mais uniquement tant que les champs TEXT contiennent moins de 8 000 caractères.
la source
Il y a eu quelques changements majeurs dans ms 2008 -> Il pourrait être utile de considérer l'article suivant lors de la prise de décision sur le type de données à utiliser. http://msdn.microsoft.com/en-us/library/ms143432.aspx
Octets par
la source