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


15

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

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


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

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


5
Вы также можете использовать varchar без части (), что также сделает его неограниченным по длине и, таким образом, более или менее эквивалентным тексту.
Магнус Хагандер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.