Wszystko, co wiem o różnicach między nimi, varchar
ma limit, a text
nie jest. Dokumentacja nie wspomina o tym.
Czy to naprawdę jedyna różnica? Bez względu na wydajność itp.?
Wszystko, co wiem o różnicach między nimi, varchar
ma limit, a text
nie jest. Dokumentacja nie wspomina o tym.
Czy to naprawdę jedyna różnica? Bez względu na wydajność itp.?
Odpowiedzi:
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 text
typu dodano nowy typ varchar
. Ale oba typy używają wewnętrznie tych samych procedur C.
Teraz, do pewnego stopnia i w niektórych miejscach, text
jest 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 text
argument lub powrót text
. Te dwa typy są kompatybilne binarnie, więc rzutowanie jest trywialną operacją w czasie analizy. Ale korzystanie z systemu text
jest 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. ;-)
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.
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.