Quelle est la différence entre le type «varchar» et le «texte» dans PostgreSQL?

15

Tout ce que je sais de leurs différences, c'est leur varcharlimite, et ce textn'est pas le cas. La documentation n'en fait pas mention.

Est-ce vraiment la seule différence? Aucune considération sur les performances ou etc?

Eonil
la source
1
Cela devrait vraiment être migré vers les administrateurs de base de données . Cela n'a rien à voir avec l'administration du serveur.
Evan Carroll

Réponses:

22

Le contexte est le suivant: l'ancien système Postgres utilisait le langage PostQUEL et utilisait un type de données nommé text(parce que quelqu'un pensait que c'était un bon nom pour un type qui stocke du texte). Postgres a ensuite été converti pour utiliser SQL comme langage. Pour obtenir la compatibilité SQL, au lieu de renommer le texttype, un nouveau type a varcharété ajouté. Mais les deux types utilisent les mêmes routines C en interne.

Maintenant, dans une certaine mesure et à certains endroits, textest codé en dur comme type par défaut, au cas où rien d'autre ne pourrait être dérivé. De plus, la plupart des fonctions ne sont disponibles que pour prendre un textargument ou pour retourner text. Les deux types sont compatibles binaires, donc la conversion est une opération d'analyse temporelle triviale. Mais l'utilisation textreste globalement plus naturelle pour le système.

Mais à part ces petits points, il n'y a pas de différence notable. Utilisez celui qui vous semble le plus joli. ;-)

Peter Eisentraut
la source
Oh bonne explication. J'utiliserai du «texte» car je me fiche de la compatibilité qui bloque l'utilisation des avantages d'un produit spécifique. Merci!
Eonil
1

Voir cette question similaire . L'essentiel est qu'il n'y a pas de différence, mais spécifier une longueur maximale telle que varchar(n)généralement n'est pas en votre faveur, car il utilise plus d'espace mais n'améliore pas les performances.

manioc
la source
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

texte sans longueur déclarée. Il n'y a aucune différence de performances entre ces deux types.

ooshro
la source
5
Vous pouvez également utiliser varchar sans la partie (), ce qui lui donnera également une longueur illimitée, et donc plus ou moins équivalente avec du texte.
Magnus Hagander