PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Pourquoi ' 2'> '10' ?

Je pense que PostgreSQL essaie automatiquement de comprendre le type dans les coulisses et sous Linux, il essaie de se débarrasser du ' ', certaines des comparaisons sont également basées sur les paramètres régionaux.

  • Ainsi, ' 2' > '10' devient '2'>'10' et la comparaison est '2'>'1'; ils ne sont pas égaux, donc pas besoin de continuer avec le reste de la chaîne, et ascii('2') est supérieur à ascii('1') , il est donc évalué à true.

  • S'il s'agissait d'une opération d'égalité (par exemple ' 22' ='22 '), le résultat serait faux car Postgres effectue une comparaison octet par octet. Ceci est important car le moteur utilise deux algorithmes différents lors des comparaisons.

  • Si vous spécifiez le type via le transtypage, il ne remplacera pas les règles d'espace (' '=>'' ).

Le crédit va également à : RhodiumToad et Peerce dans #postgresql