web-dev-qa-db-fra.com

Quelles sont les conséquences du réglage de Varchar (8000)?

Puisque Varcharne prend des espaces de disque proportionnels à la taille du champ, y a-t-il une raison pour laquelle nous ne devrions pas toujours définir Varcharne comme maximum, par exemple. varchar(8000) sur SQL Server?

Sur la table Create, si je vois quiconque fait varchar(100) Je devrais leur dire non, vous vous trompez, vous devriez faire varchar(8000)?

22
  • La longueur est une contrainte sur les données (comme chèque, fk, null, etc.)
  • Performance lorsque la ligne dépasse 8060 octets
  • Impossible de ne pas avoir de contrainte ou d'index unique (la largeur de la colonne de clé doit être <900)
  • La valeur par défaut est définie le rembourrage ANSI sur = potentiel de beaucoup d'espaces de fuite à stocker
  • SQL Server supposera que la longueur moyenne est de 4000 pour les opérations de tri, allouant de la mémoire basée sur celle-ci (nécessité de trouver un lien vers le haut, mais Rust tandis que je fais :-)

Résumé: Ne le faites pas.

18
gbn

En supposant que vous parlez de SQL Server, je peux penser à un.

Il y a une limite à la taille (8K) d'une rangée dans une table et SQL vous permet de définir des champs Varcharis pouvant théoriquement dépasser cette limite. L'utilisateur pourrait donc avoir des erreurs s'ils mettent trop de données sur le terrain en rapport avec cela.

En commençant par SQL 2K8, vous pouvez dépasser cette limite, mais il y a implications de performance .

En outre, il existe toute la vérification raisonnable de limiter la taille à ce que vous attendez des données à ressembler. Si vous voulez un champ de longueur sans bornes, pourquoi ne pas aller avec du texte ou du NText?

7
JohnFx

Cela dépend certainement de quelles informations sont stockées sur le terrain?

Certaines choses vont avoir une longueur maximale pour un certain nombre de raisons et s'il doit y avoir une longueur maximale, cela devrait être la longueur de votre champ.

Si théoriquement, il n'y a pas de longueur maximale, je poserais pourquoi Varcharner serait utilisé.

3
Toby

Je contexte de bases de données Oracle j'ai appris que l'utilisation toujours en utilisant toujours la plus petite taille de champ pour les colonnes de base de données a un piège.

Lors de la déplacement des données via l'import Exporter à partir d'une base de données avec une assemblée d'octets à une seule collision d'octets (comme Oracle Xe), la longueur des octets peut augmenter et importer les données dans les tableaux créés par l'importation échoue. Bien sûr, Oracle a la possibilité de définir la longueur de Varchar2 soit en tant que char ou en octets.

Mon point ici, est qu'il n'est pas toujours sage de définir le champ avec toujours aussi petit que possible. J'ai vu beaucoup de tables alternatives pour augmenter le champ avec plus tard (causée par des exigences modifiées).

Avoir 20% - 100% de champ inutilisé avec une option répartie ici.

3
bernd_k