Jaka jest różnica między typem „varchar” i „tekst” w PostgreSQL?

15

Wszystko, co wiem o różnicach między nimi, varcharma limit, a textnie jest. Dokumentacja nie wspomina o tym.

Czy to naprawdę jedyna różnica? Bez względu na wydajność itp.?

Eonil
źródło
1
To naprawdę powinno zostać przeniesione do administratorów baz danych . Nie ma nic wspólnego z administracją serwera.
Evan Carroll

Odpowiedzi:

22

Tłem tego jest: stary system Postgres używał języka PostQUEL i używał nazwanego typu danych text(ponieważ ktoś uważał, że to dobra nazwa dla typu przechowującego tekst). Następnie Postgres został przekonwertowany na język SQL jako język. Aby osiągnąć zgodność z SQL, zamiast zmiany nazwy texttypu dodano nowy typ varchar. Ale oba typy używają wewnętrznie tych samych procedur C.

Teraz, do pewnego stopnia i w niektórych miejscach, textjest zakodowany na stałe jako typ domyślny, na wypadek, gdyby nic innego nie można było uzyskać. Ponadto większość funkcji jest dostępna tylko jako textargument lub powrót text. Te dwa typy są kompatybilne binarnie, więc rzutowanie jest trywialną operacją w czasie analizy. Ale korzystanie z systemu textjest ogólnie bardziej naturalne dla systemu.

Ale oprócz tych drobnych punktów nie ma zauważalnej różnicy. Używaj tego, co wygląda dla ciebie ładniej. ;-)

Peter Eisentraut
źródło
Och, dobre wytłumaczenie. Użyję „tekstu”, ponieważ nie dbam o kompatybilność, która blokuje korzystanie z określonego produktu. Dzięki!
Eonil
1

Zobacz to podobne pytanie . Największą zaletą jest to, że nie ma różnicy, ale określenie maksymalnej długości, na varchar(n)ogół nie jest na twoją korzyść, ponieważ zajmuje więcej miejsca, ale nie poprawia wydajności.

maniok
źródło
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

tekst bez zadeklarowanej długości. Nie ma różnic w wydajności między tymi dwoma typami.

ooshro
źródło
5
Możesz także używać varchar bez części (), co spowoduje, że będzie miał również nieograniczoną długość, a tym samym mniej więcej będzie równoważny z tekstem.
Magnus Hagander