Jeg tror, at PostgreSQL automatisk forsøger at finde ud af typen bag kulisserne, og i Linux forsøger den at slippe af med ' ', nogle af sammenligningerne er også baseret på lokalitet.
-
Således
' 2' > '10'
bliver'2'>'10'
og sammenligningen er'2'>'1'
; de er ikke ens, så det er ikke nødvendigt at fortsætte med resten af strengen ogascii('2')
er større endascii('1')
, så det vurderes til at være sandt. -
Hvis det var en lighedsoperation (f.eks. ' 22' ='22 '), ville det resultere i falsk, fordi Postgres foretager en byte for byte-sammenligning. Dette er vigtigt, fordi motoren bruger to forskellige algoritmer, når de foretager sammenligninger.
-
Hvis du angiver typen via typecasting, vil den ikke tilsidesætte pladsreglerne (
' '=>''
).
Også kredit går til: RhodiumToad og Peerce i #postgresql