В чем разница между типами "varchar" и "text" в PostgreSQL?
Все, что я знаю о различиях, это varchar
имеет предел, и text
не является. В документации не упоминается об этом.
Это действительно единственная разница? Не заботиться о производительности или т. Д.?
3 ответа
Фон этого: старая система 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
текст без объявленной длины. Между этими двумя типами нет различий в производительности.