Всегда выбирайте наименьший возможный тип данных. SQL не может угадать, каким должно быть максимальное значение, но он может оптимизировать хранилище и производительность, как только вы укажете тип данных.
Чтобы ответить на ваше обновление:
varchar
занимает только столько места, сколько вы используете, и поэтому вы правы, когда говорите, что символ «а» будет занимать 1 байт (в латинской кодировке) независимо от размера поля varchar
твой выбор. Это не относится к любому другому типу поля в SQL.
Тем не менее, вы, вероятно, пожертвуете эффективностью ради космоса, если сделаете все как поле varchar. Если все является полем фиксированного размера, тогда SQL может выполнить простое умножение в постоянном времени, чтобы найти ваше значение (например, массив). Если у вас есть поля varchar, то единственный способ узнать, где хранятся ваши данные, - это просмотреть все предыдущие поля (например, связанный список).
Если вы начинаете SQL, я советую просто держаться подальше от полей varchar, если только вы не предполагаете, что в полях иногда содержится очень небольшое количество текста, а иногда и очень большое количество текста (например, сообщения в блоге). Требуется опыт, чтобы знать, когда лучше использовать поля переменной длины, и даже большую часть времени я не знаю.