Ответ - нет .
Не добавляйте модификатор длины, varchar
если вы можете избежать этого. В большинстве случаев вам вообще не нужно ограничение длины. Просто используйте text
для всех символьных данных. Сделайте это varchar
(без модификатора длины), если вам нужно оставаться совместимым с СУБД, которых нет text
.
Производительность почти то же самое - text
это немного быстрее , в редких случаях , и вы сохраните циклы для проверки на длину.
Если вам действительно нужно установить максимальную длину, все равно используйте text
и добавьте проверочное ограничение для этого:
ALTER TABLE tbl ADD CONSTRAINT tbl_col_len CHECK (length(col) < 51);
Вы можете изменить или удалить такое ограничение в любое время без необходимости связываться с определением таблицы и всеми зависимыми объектами (представлениями, функциями, внешними ключами, ...)
С модификаторами длины вы можете столкнуться с такими проблемами, как эта или эта или эта ...
В PostgreSQL 9.1 появилась новая функция, которая несколько облегчает боль. Я цитирую примечания к выпуску здесь :
Позволяют ALTER TABLE ... SET DATA TYPE
избежать переписывания таблиц в соответствующих случаях (Ноа Миш, Роберт Хаас)
Например, преобразование varchar
столбца в текст больше не требует переписывания таблицы. Однако увеличение ограничения длины для
varchar
столбца все еще требует перезаписи таблицы.