Я могу говорить только за Oracle. VARCHAR2 (50) и VARCHAR2 (255) занимают одинаковое количество места и работают одинаково, если вы введете значение «SMITH».
Однако причина, по которой вообще не стоит объявлять все ваши текстовые столбцы как VARCHAR2 (4000), заключается в том, что длина столбца, по сути, является еще одним ограничением. А ограничения - это реализация бизнес-правил в базе данных, поэтому они определенно должны определяться на стороне базы данных.
В качестве примера. Вы определяете ограничение CHECK для столбца, чтобы значения, которые он может принимать, были только «Y» и «N». Это избавляет ваше приложение от необходимости иметь дело с 'y' и 'n' или даже с '1' и '0'. Проверочное ограничение гарантирует, что ваши данные соответствуют ожидаемым стандартам. Код вашего приложения может затем сделать правильные предположения о природе данных, с которыми он имеет дело.
Определение длины столбца в одной лодке. Вы объявляете что-то VARCHAR2 (10), потому что не хотите, чтобы оно принимало запись 'ABC123ZYX456' (по любой причине!)
В Австралии я определяю столбцы STATE как varchar2 (3), потому что я не хочу, чтобы люди печатали «Новый Южный Уэльс» или «Южная Австралия». Определение столбца в значительной степени заставляет их вводиться как «NSW» и «SA». В этом смысле VARCHAR2 (3) является почти столько же проверочным ограничением, сколько и фактическим указанием ограничения CHECK IN («NSW», «SA», «VIC» и т. Д.).
Короче говоря, правильная длина столбцов - это способ кодирования бизнес-правил. Они еще одна форма ограничения. Они приносят все преимущества ограничений (и страдают от многих одинаковых недостатков). И они в некоторой степени обеспечивают степень «чистоты данных», с которой «правильные» ограничения также помогают.
Я тоже не согласен с аргументом о том, что такие вещи лучше всего вставлять в клиентское приложение, потому что их легче там изменить. У вас есть 20 000 человек, использующих приложение, это 20 000 обновлений. У вас есть одна база данных, это одно обновление. Аргумент «проще изменить клиентское приложение», если он истинный, потенциально может означать, что база данных будет восприниматься как гигантское ведро со всей умной логикой, обрабатываемой в клиентском коде. Это большая дискуссия, но, поскольку все СУБД позволяют вам определять ограничения и т. Д. В самой базе данных, совершенно очевидно, что есть хотя бы стоящий случай, когда такая фундаментальная логика принадлежит бэкэнду.