Extrait de la documentation de MySQL:
Les types CHAR et VARCHAR sont similaires, mais diffèrent dans la façon dont ils sont stockés et récupérés. Depuis MySQL 5.0.3, ils diffèrent aussi dans la longueur maximale et dans la si les les espaces sont conservés.
Les types CHAR et VARCHAR sont déclarées avec une longueur qui indique le nombre maximal de caractères que vous souhaitez stocker. Par exemple, CHAR(30) peut contenir jusqu'à 30 caractères.
La longueur d'une colonne CHAR est fixe pour la durée que vous déclarez lorsque vous créez la table. La longueur peut être n'importe quelle valeur de 0 à 255. Lors de CHAR, les valeurs sont stockées, elles sont complétées par des espaces à la longueur spécifiée. Lorsque CHAR les valeurs sont récupérées, les espaces sont supprimés.
Les valeurs dans des colonnes VARCHAR sont des chaînes de longueur variable. La longueur peut être défini comme une valeur de 0 à 255 avant MySQL 5.0.3, et de 0 à 65 535 en 5.0.3 et les versions ultérieures. La longueur maximale réelle d'un VARCHAR dans MySQL 5.0.3 et, plus tard, est soumise à la taille maximale de ligne (65 535 octets, qui est partagé entre toutes les colonnes) et le jeu de caractères utilisé.
En revanche CHAR, VARCHAR valeurs sont stockées sous forme d'un octet ou deux octets de préfixe de longueur et de données. Le préfixe de longueur indique le nombre d'octets de la valeur. Une colonne utilise une longueur en octets si les valeurs nécessitent pas plus de 255 octets, deux octets de longueur si les valeurs peuvent nécessiter plus de 255 octets.