Выдержка из документации MySQL :
Типы CHAR и VARCHAR похожи, но отличаются тем, как они хранятся и извлекаются.Начиная с MySQL 5.0.3, они также различаются по максимальной длине и тому, сохраняются ли конечные пробелы.
Типы CHAR и VARCHAR объявляются с длиной, указывающей максимальное количество символов, которое вы хотите сохранить.Например, CHAR (30) может содержать до 30 символов.
Длина столбца CHAR устанавливается равной длине, которую вы объявляете при создании таблицы.Длина может быть любым значением от 0 до 255. Когда значения CHAR сохраняются, они дополняются справа пробелами до указанной длины.При получении значений CHAR завершающие пробелы удаляются.
Значения в столбцах VARCHAR являются строками переменной длины.Длина может быть указана как значение от 0 до 255 до MySQL 5.0.3 и от 0 до 65 535 в 5.0.3 и более поздних версиях.Максимальная эффективная длина VARCHAR в MySQL 5.0.3 и более поздних версиях зависит от максимального размера строки (65 535 байт, который используется всеми столбцами) и используемого набора символов.
В отличие от CHAR, VARCHARзначения хранятся в виде однобайтового или двухбайтового префикса длины плюс данные.Префикс длины указывает количество байтов в значении.Столбец использует один байт длины, если значения требуют не более 255 байтов, два байта длины, если значения могут требовать более 255 байтов.