Відповідь - ні .
Не додайте модифікатор довжини, 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
стовпця все ж потрібно переписати таблицю.