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).
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).
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).
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.
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.
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.
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.
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).