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