Все, что я знаю о различиях между ними, varchar
имеет предел, а text
его нет. В документации не упоминается об этом.
Это действительно единственная разница? Не заботиться о производительности или т. Д.?
Все, что я знаю о различиях между ними, varchar
имеет предел, а text
его нет. В документации не упоминается об этом.
Это действительно единственная разница? Не заботиться о производительности или т. Д.?
Ответы:
Предпосылки этого таковы: старая система Postgres использовала язык PostQUEL и использовала тип данных с именем text
(потому что кто-то считал, что это хорошее имя для типа, в котором хранится текст). Затем Postgres был преобразован для использования SQL в качестве языка. Для достижения совместимости с SQL вместо переименования text
типа varchar
был добавлен новый тип . Но оба типа используют одни и те же подпрограммы Си внутри.
Теперь, в некоторой степени и в некоторых местах, 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
текст без объявленной длины. Между этими двумя типами нет различий в производительности.