Все, що я знаю про їхні відмінності, varchar
має межу, і text
це не так. У документації про це не йдеться.
Це справді єдина різниця? Не враховуйте продуктивність чи інше?
Все, що я знаю про їхні відмінності, varchar
має межу, і text
це не так. У документації про це не йдеться.
Це справді єдина різниця? Не враховуйте продуктивність чи інше?
Відповіді:
Фон цього: Стара система Postgres використовувала мову PostQUEL і використовувала тип даних з назвою text
(адже хтось вважав, що це добре ім'я для типу, який зберігає текст). Потім Postgres був перетворений для використання SQL як своєї мови. Для досягнення сумісності з SQL замість перейменування text
типу varchar
було додано новий тип . Але обидва типи використовують все ті ж підпрограми C всередині.
Зараз, певною мірою, а в деяких місцях, він text
є жорстким кодом як тип за замовчуванням, на випадок, якщо нічого іншого неможливо отримати. Крім того, більшість функцій доступні лише як text
аргумент або повернення text
. Два типи є бінарними сумісними, тому кастинг - це тривіальна операція розбору. Але використання text
все-таки більш природно для системи.
Але окрім цих тонких моментів, помітної різниці немає. Використовуйте те, що з вас виглядає красивіше. ;-)
Дивіться подібне запитання . Суть полягає в тому, що різниці немає, але вказати максимальну довжину, таку як varchar(n)
правило, не на вашу користь, оскільки вона використовує більше місця, але не покращує продуктивність.
http://www.postgresql.org/docs/8.4/interactive/datatype-character.html
character varying(n), varchar(n) variable-length with limit
text variable unlimited length
текст без оголошеної довжини. Немає відмінностей у роботі між цими двома типами.