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