Назад | Перейти на главную страницу

Какая разница между типом varchar и типом text в PostgreSQL?

Все, что я знаю о различиях между ними, это 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

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