Все, что я знаю о различиях между ними, это 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
текст без заявленной длины. Между этими двумя типами нет разницы в производительности.