Was ist der Unterschied zwischen "varchar" und "text" in PostgreSQL?

15

Alles, was ich über Unterschiede von ihnen weiß, ist varcharbegrenzt und textnicht. Die Dokumentation erwähnt dies nicht.

Ist das wirklich der einzige Unterschied? Keine Rücksicht auf Leistung oder etc?

Eonil
quelle
1
Dies sollte wirklich auf Datenbankadministratoren migriert werden . Mit der Serververwaltung hat es überhaupt nichts zu tun.
Evan Carroll

Antworten:

22

Der Hintergrund hierfür ist: Das alte Postgres-System verwendete die PostQUEL-Sprache und einen Datentyp namens text(weil jemand dachte, dass dies ein guter Name für einen Typ ist, der Text speichert). Anschließend wurde Postgres konvertiert, um SQL als Sprache zu verwenden. Um SQL-Kompatibilität zu erreichen text, wurde ein neuer Typ varcharhinzugefügt , anstatt den Typ umzubenennen. Beide Typen verwenden jedoch intern dieselben C-Routinen.

Jetzt ist bis zu einem gewissen Grad und an einigen Stellen ein textfester Code als Standardtyp festgelegt, falls nichts anderes abgeleitet werden kann. Außerdem sind die meisten Funktionen nur als textArgument oder als Rückgabe verfügbar text. Die beiden Typen sind binär kompatibel, sodass das Casting eine triviale Parse-Time-Operation ist. Aber mittext ist jedoch insgesamt noch natürlicher für das System.

Aber abgesehen von diesen Feinheiten gibt es keinen merklichen Unterschied. Verwenden Sie, was für Sie schöner aussieht. ;-)

Peter Eisentraut
quelle
Oh gute Erklärung. Ich verwende "Text", da mir die Kompatibilität nicht wichtig ist, welche Blöcke die Vorteile eines bestimmten Produkts nutzen. Vielen Dank!
Eonil
1

Siehe diese ähnliche Frage . Der Clou ist, dass es keinen Unterschied gibt, aber die Angabe einer maximalen Länge, wie sie im varchar(n)Allgemeinen nicht zu Ihren Gunsten ist, da sie mehr Platz beansprucht, aber die Leistung nicht verbessert.

Maniok
quelle
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

Text ohne angegebene Länge. Es gibt keine Leistungsunterschiede zwischen diesen beiden Typen.

ooshro
quelle
5
Sie können varchar auch ohne den () -Teil verwenden, wodurch die Länge ebenfalls unbegrenzt wird und der Text mehr oder weniger gleichwertig ist.
Magnus Hagander