Tout ce que je sais de leurs différences, c'est leur varchar
limite, et ce text
n'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 varchar
limite, et ce text
n'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 text
type, 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, text
est 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 text
argument ou pour retourner text
. Les deux types sont compatibles binaires, donc la conversion est une opération d'analyse temporelle triviale. Mais l'utilisation text
reste 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.