web-dev-qa-db-fra.com

Pourquoi VARCHAR a-t-il besoin d'une spécification de longueur?

Pourquoi devons-nous toujours spécifier VARCHAR(length) au lieu de simplement VARCHAR? C'est quand même dynamique.

UPD: Je suis intrigué spécifiquement par le fait que c'est obligatoire (par exemple dans MySQL).

52
Fixpoint

La "longueur" du VARCHAR n'est pas la longueur du contenu, c'est la longueur maximale du contenu.

La longueur maximale d'un VARCHAR n'est pas dynamique, elle est fixe et doit donc être spécifiée.

Si vous ne souhaitez pas lui définir de taille maximale, utilisez VARCHAR (MAX).

32
Robin Day

Tout d'abord, il n'en a pas besoin dans toutes les bases de données. Regardez SQL Server , où il est facultatif.

Quoi qu'il en soit, il définit une taille maximale pour le contenu du champ. Pas une mauvaise chose en soi, et cela donne du sens (par exemple - des numéros de téléphone, où vous ne voulez pas de numéros internationaux sur le terrain).

13
Oded

Vous pouvez le voir comme une contrainte sur vos données. Il garantit que vous ne stockez pas de données qui violent votre contrainte. Il est conceptuellement similaire à par exemple une contrainte de vérification sur une colonne entière qui garantit que seules les valeurs positives sont entrées.

7

Plus la base de données connaît les données qu'elle stocke, plus elle peut faire d'optimisations lors de la recherche/ajout/mise à jour de données avec des requêtes.

4
Tom Gullen

Il y a des performances possibles impact: dans MySQL, temporary tables et MEMORY tables stocke une colonne VARCHAR en tant que colonne de longueur fixe, complétée à sa longueur maximale.

Si vous concevez des colonnes VARCHAR beaucoup plus grandes que la plus grande taille dont vous avez besoin, vous consommerez plus de mémoire que nécessaire. Cela affecte cache efficiency, sorting speed, etc.

Donc, vous donnez la longueur maximale qui est sous votre chaîne. comme si vous avez une longueur maximale de 10 caractères, alors ne donnez pas sa longueur à 100 ou plus.

4
Vipin Jain

La réponse est que vous pas devez, c'est facultatif.

Il est là si vous voulez vous assurer que les chaînes ne dépassent pas une certaine longueur.

3
NibblyPig

De Wikipedia :

Les champs Varchar peuvent être de n'importe quelle taille jusqu'à la limite. La limite diffère des types de bases de données, une base de données Oracle 9i a une limite de 4000 octets, une base de données MySQL a une limite de 65 535 octets (pour la ligne entière) et Microsoft SQL Server 2005 8000 octets (sauf si varchar (max) est utilisé, qui a une capacité de stockage maximale de 2 147 483 648 octets).

1
Luca Matteis