varchar (max) MS SQL Server 2000, des problèmes?

J'ai hérité d'un projet de site Web asp.net qui exécute actuellement SQL Server 2000 en tant que backend.

J'ai fait quelques changements de bases de données sur une copy locale de la database en utilisant SQL Server 2005 Express. J'ai créé une table en utilisant des colonnes varchar(max) . Ils sont utilisés pour stocker des extraits de XHTML de longueur arbitraire.

Lors de la navigation sur stackoverflow je suis tombé sur ceci: Y at-il des inconvénients à toujours utiliser nvarchar (MAX)?

Mattruma user dit qu'il a découvert la "façon difficile" sur l'utilisation de varchar(max) sur SQL Server 2000.

Que dois-je utiliser au lieu de varchar(max) étant donné que la database en direct s'exécute sur SQL Server 2000?

Merci d'avance pour votre aide!

Il semble que les limitations de varchar(MAX) sont un point discutable si votre database en direct est SQL Server 2000, qui ne les prend pas en charge. Si vous avez plus de 8K caractères à stocker, il vous rest à peu près la seule autre option, une colonne TEXT . Cependant, sachez que les colonnes TEXT ont aussi beaucoup de limitations.

Par exemple, vous ne pouvez pas les sortinger ou les regrouper facilement, et vous ne pouvez pas non plus les comparer à d'autres colonnes. C'est-à-dire que vous ne pouvez pas dire Select * from mytable where Mytext1 = mytext2 .

Autres préoccupations pertinentes

  • Je suggère d'utiliser une colonne NText ou NVarchar indépendamment de la façon dont vous allez prendre en charge Unicode.
  • Si la table contient beaucoup d'autres colonnes et que la colonne varchar(8000) est susceptible d'être fréquemment proche de full, vous pouvez rencontrer des problèmes avec la limite de lignes de 8K. Gardez cela en tête aussi.

VARCHAR(Max) été introduit dans SQL Server 2005 et ne fonctionnera pas sur SQL Server 2000. Vous devez utiliser VARCHAR(8000) supposant que ce sera assez grand. Sinon, vous devrez utiliser TEXT

modifier

Aussi, si vous passez à VARCHAR(8000) gardez à l'esprit qu'il existe une limite qu'une seule ligne ne peut pas avoir plus de 8060 octets. Donc, si vous remplissez une table varchar(8000) et avez un tas d'autres grandes colonnes, vous obtiendrez une erreur. C'est là que le Text entre.

Text a une implication sur les performances car, par défaut, il est stocké dans un location distinct et conserve un pointeur dans une table. Il existe une option set qui modifie ce comportement afin que les types de text soient conservés dans la table jusqu'à ce qu'ils atteignent une certaine taille. Si vous avez la plupart du time de petits blobs, vous pouvez l'activer.

Utilisez une colonne TEXT.

Cela dépend de vos besoins. Vous pouvez utiliser une colonne TEXT au lieu de VARCHAR (MAX) mais vous devez vous assurer que votre implémentation n'a pas besoin de chercher sur ce champ, car vous ne pouvez pas faire de comparaison avec les champs TEXT et NTEXT.

Si vous pouvez vous limiter à 8000 caractères, j'utiliserais une colonne VARCHAR (8000) pour stocker les informations.