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?
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?
Réponses:
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. ;-)
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.
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.