VARCHAR - строки переменной длины. Если в VARCHAR(255) записать 32-байтную строку, то и в памяти строка займет 32 байта + 1 байт на хранение длины строки.
А вот поле CHAR(255) всегда будет занимать 255 байт (незаполненный данные при хранении заполняются пробелами).
Так что если в будущем длина поля может поменяться, и строгое ограничение длины в базе не критично, то смело пишите VARCHAR(255). В базе будет храниться ровно столько данных. сколько вы туда запишете.
По целочисленным типам, как уже написали - если знаете диапазон значений в этом поле и уверены, что со временем величины из этого диапазона не выйдут, то используйте максимально длизкий к этому диапазону тип для хранения. Например, если значения в столбце никогда не превысят 127, то достаточно поля TINYINT.