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