Alles, was ich über Unterschiede von ihnen weiß, ist varchar
begrenzt und text
nicht. Die Dokumentation erwähnt dies nicht.
Ist das wirklich der einzige Unterschied? Keine Rücksicht auf Leistung oder etc?
Alles, was ich über Unterschiede von ihnen weiß, ist varchar
begrenzt und text
nicht. Die Dokumentation erwähnt dies nicht.
Ist das wirklich der einzige Unterschied? Keine Rücksicht auf Leistung oder etc?
Antworten:
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 varchar
hinzugefü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 text
fester Code als Standardtyp festgelegt, falls nichts anderes abgeleitet werden kann. Außerdem sind die meisten Funktionen nur als text
Argument 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. ;-)
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.
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.