Ich denke, PostgreSQL versucht automatisch, den Typ hinter den Kulissen herauszufinden, und unter Linux versucht es, das ' ' loszuwerden, einige der Vergleiche basieren auch auf dem Gebietsschema.
-
Also
' 2' > '10'
wird zu'2'>'10'
und der Vergleich ist'2'>'1'
; Sie sind nicht gleich, also brauchen Sie nicht mit dem Rest der Zeichenfolge fortzufahren, undascii('2')
ist größer alsascii('1')
, wird also als wahr ausgewertet. -
Wenn es sich um eine Gleichheitsoperation handeln würde (z. B. „22“ =„22“), würde dies zu „false“ führen, da Postgres einen Byte-für-Byte-Vergleich durchführt. Dies ist wichtig, da die Engine beim Vergleichen zwei verschiedene Algorithmen verwendet.
-
Wenn Sie den Typ per Typumwandlung angeben, werden die Leerzeichenregeln nicht außer Kraft gesetzt (
' '=>''
).
Gutschrift geht auch an: RhodiumToad und Peerce in #postgresql