781 votes

Différence entre le texte et varchar (caractère variable)

Quelle est la différence entre le type de données text et les types de données character varying (varchar) ?

Selon la documentation

Si le character varying est utilisé sans spécificateur de longueur, le type accepte des chaînes de n'importe quelle taille. Ce dernier est une extension de PostgreSQL.

et

De plus, PostgreSQL fournit le type text, qui stocke des chaînes de n'importe quelle longueur. Bien que le type text ne soit pas inclus dans la norme SQL, plusieurs autres systèmes de gestion de base de données SQL le proposent également.

Alors quelle est la différence ?

28voto

bpd Points 251

Text and varchar have different implicit type conversions. The biggest impact that I've noticed is handling of trailing spaces. For example ...

select ' '::char = ' '::varchar, ' '::char = ' '::text, ' '::varchar = ' '::text

returns true, false, true and not true, true, true as you might expect.

0 votes

Comment est-ce possible? Si a = b et a = c alors b = c.

1 votes

Testé, et c'est en effet vrai. Impossible, mais vrai. Très, très étrange.

0 votes

C'est parce que l'opérateur = ne se contente pas de comparer les choses, mais il fait également quelques conversions pour trouver un type commun pour les valeurs. C'est un comportement assez courant dans divers langages, et les conversions utilisées diffèrent également d'une langue à l'autre. Par exemple en JavaScript, vous pouvez voir que [0 == '0.0', 0 == '0', '0.0' == '0'] -> [true, true, false]

7voto

Greg Points 978

Un peu hors sujet : Si vous utilisez Rails, la mise en forme standard des pages Web peut être différente. Pour les formulaires de saisie de données, les cases de texte sont déroulantes, mais les cases de caractères variables (Rails string) sont d'une seule ligne. Les vues affichées sont aussi longues que nécessaire.

6voto

Chris Halcrow Points 907

Une bonne explication de http://www.sqlines.com/postgresql/datatypes/text:

La seule différence entre TEXT et VARCHAR(n) est que vous pouvez limiter la longueur maximale d'une colonne VARCHAR, par exemple, VARCHAR(255) ne permet pas d'insérer une chaîne de plus de 255 caractères.

Les deux TEXT et VARCHAR ont une limite supérieure à 1 Go, et il n'y a pas de différence de performance entre eux (selon la documentation de PostgreSQL).

1voto

Rajat Sancheti Points 11

J'ai perdu tellement de temps à cause de l'utilisation de varchar au lieu de text pour les tableaux PostgreSQL.

Les opérateurs de tableaux PostgreSQL ne fonctionnent pas avec les colonnes de type texte. Consultez ces liens pour plus de détails : (https://github.com/rails/rails/issues/13127) et (http://adamsanderson.github.io/railsconf_2013/?full#10).

0voto

sabik Points 58

Si vous utilisez uniquement le type TEXT, vous pourriez rencontrer des problèmes lors de l'utilisation du service de migration de base de données AWS :

Des objets volumineux (LOBs) sont utilisés mais les colonnes cibles LOB ne sont pas nullable

En raison de leur taille inconnue et parfois importante, les objets volumineux (LOBs) nécessitent plus de traitement et de ressources que les objets standard. Pour aider à régler les migrations des systèmes contenant des LOBs, AWS DMS propose les options suivantes

Si vous ne comptez utiliser que PostgreSQL pour tout, probablement vous serez bien. Mais si vous comptez interagir avec votre base de données via ODBC ou des outils externes comme DMS, vous devriez envisager de ne pas utiliser TEXT pour tout.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X