Ik denk dat PostgreSQL automatisch achter de schermen probeert het type te achterhalen en in Linux probeert het de ' ' te verwijderen, sommige vergelijkingen zijn ook gebaseerd op de landinstelling.
-
Dus
' 2' > '10'
wordt'2'>'10'
en de vergelijking is'2'>'1'
; ze zijn niet gelijk, dus het is niet nodig om verder te gaan met de rest van de string, enascii('2')
is groter danascii('1')
, dus het evalueert naar waar. -
Als het een gelijkheidsbewerking zou zijn (bijv. ' 22' ='22 '), zou het resulteren in false omdat Postgres een byte-byte-vergelijking doet. Dit is belangrijk omdat de engine twee verschillende algoritmen gebruikt bij het vergelijken.
-
Als u het type opgeeft via typecasting, overschrijft het de regels voor de ruimte niet (
' '=>''
).
Het tegoed gaat ook naar: RhodiumToad en Peerce in #postgresql