Jag tror att PostgreSQL automatiskt försöker ta reda på typen bakom kulisserna och i Linux försöker den bli av med ' ', några av jämförelserna är också baserade på lokalitet.
-
Alltså
' 2' > '10'
blir'2'>'10'
och jämförelsen är'2'>'1'
; de är inte lika, så du behöver inte fortsätta med resten av strängen ochascii('2')
är större änascii('1')
, så det utvärderas till sant. -
Om det vore en likhetsoperation (t.ex. ' 22' ='22 ') skulle det resultera i falskt eftersom Postgres gör en byte för byte-jämförelse. Detta är viktigt eftersom motorn använder två olika algoritmer när de gör jämförelser.
-
Om du anger typen via typecasting kommer den inte att åsidosätta utrymmesreglerna (
' '=>''
).
Också kredit går till: RhodiumToad och Peerce i #postgresql