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?


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. ;-)


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.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.