Quelle que soit la longueur que vous définissez pour votre colonne varchar, l'espace de stockage utilisé par une colonne vide sera le même.
Les types CHAR et VARCHAR
Cela ne concerne que l'espace utilisé par la colonne varchar et ne prend pas en compte l'espace de stockage total utilisé par la ligne, ses index, ses clés primaires et les autres colonnes.
Comme ypercube le mentionne dans son commentaire, il existe des considérations supplémentaires pour le stockage des lignes dans son ensemble lorsqu'au moins une colonne nullable est présente.
Structure de ligne physique Innodb
La partie de longueur variable de l'en-tête d'enregistrement contient un vecteur de bits pour indiquer les colonnes NULL. S'il y a entre 9 et 15 colonnes qui peuvent être NULL, le vecteur binaire utilise deux octets.)
...
La partie de longueur variable de l'en-tête contient également les longueurs des colonnes de longueur variable. Chaque longueur prend un ou deux octets, selon la longueur maximale de la colonne. Si toutes les colonnes de l'index ne sont PAS NULES et ont une longueur fixe, l'en-tête d'enregistrement n'a pas de partie de longueur variable
Et oui, l'espace de stockage utilisé change en fonction du type que vous choisissez, est-il fixe ou variable, le classement et d'autres facteurs tels que le moteur.
MySQL fait des recommandations sur l'optimisation du stockage des données ici: Optimiser la taille des données
Mise à jour
Une considération supplémentaire avec varchar et c'est la mémoire. Il est important dans MySQL de limiter autant que possible la taille d'une colonne de longueur variable. Même si la colonne est variable et l'espace de stockage utilisé est variable, MySQL allouera de la mémoire en morceaux fixes pour stocker les valeurs. Par exemple, varchar (200) utilisera plus de mémoire que varchar (5). Ce n'est pas un problème d'espace de stockage, mais quelque chose à considérer lors de la définition de vos colonnes.