Відповідь - ні .
Не додайте модифікатор довжини, varcharякщо ви можете цього уникнути. Більшість випадків вам фактично не потрібно обмеження довжини. Просто використовуйте textдля всіх символьних даних. Зробіть це varchar(без модифікатора довжини), якщо вам потрібно залишатися сумісним з RDBMS, які не мають 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стовпця все ж потрібно переписати таблицю.