Myslím, že PostgreSQL se automaticky snaží zjistit typ v zákulisí a v Linuxu se snaží zbavit ' ', některá srovnání jsou také založena na národním prostředí.
-
Tedy
' 2' > '10'se změní na'2'>'10'a porovnání je'2'>'1'; nejsou stejné, takže není třeba pokračovat se zbytkem řetězce aascii('2')je větší nežascii('1'), takže se vyhodnotí jako true. -
Pokud by se jednalo o operaci rovnosti (např. '22' ='22'), výsledkem by byla nepravda, protože Postgres provádí porovnávání bajt po byte. To je důležité, protože motor používá při porovnávání dva různé algoritmy.
-
Pokud zadáte typ pomocí přetypování, nepřepíše pravidla mezer (
' '=>'').
Poděkování patří také: RhodiumToad a Peerce v #postgresql