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, etascii('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