В чем разница между типом «varchar» и «текст» в PostgreSQL?

15

Все, что я знаю о различиях между ними, varcharимеет предел, а textего нет. В документации не упоминается об этом.

Это действительно единственная разница? Не заботиться о производительности или т. Д.?

Eonil
источник
1
Это действительно должно быть перенесено к администраторам баз данных . Это не имеет никакого отношения к администрированию сервера.
Эван Кэрролл

Ответы:

22

Предпосылки этого таковы: старая система Postgres использовала язык PostQUEL и использовала тип данных с именем text(потому что кто-то считал, что это хорошее имя для типа, в котором хранится текст). Затем Postgres был преобразован для использования SQL в качестве языка. Для достижения совместимости с SQL вместо переименования textтипа varcharбыл добавлен новый тип . Но оба типа используют одни и те же подпрограммы Си внутри.

Теперь, в некоторой степени и в некоторых местах, textон жестко закодирован как тип по умолчанию, если больше ничего не может быть получено. Кроме того, большинство функций доступны только в качестве textаргумента или возврата text. Два типа являются двоично-совместимыми, поэтому приведение является тривиальной операцией анализа. Но использование textвсе еще более естественно для системы.

Но, кроме этих тонких моментов, заметной разницы нет. Используйте тот, который кажется вам более симпатичным. ;-)

Питер Айзентраут
источник
О, хорошее объяснение. Я буду использовать «текст», потому что меня не волнует совместимость, которая блокирует использование определенного продукта. Благодарность!
Eonil
1

Смотрите этот похожий вопрос . Суть в том, что нет никакой разницы, но указание максимальной длины, как varchar(n)правило, не в вашу пользу, поскольку она занимает больше места, но не повышает производительность.

маниока
источник
0

http://www.postgresql.org/docs/8.4/interactive/datatype-character.html

character varying(n), varchar(n)        variable-length with limit
text                                    variable unlimited length

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

ooshro
источник
5
Вы также можете использовать varchar без части (), что также сделает его неограниченным по длине и, таким образом, более или менее эквивалентным тексту.
Магнус Хагандер