В чем разница между типами "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

текст без объявленной длины. Между этими двумя типами нет различий в производительности.

Другие вопросы по тегам