Penso che PostgreSQL tenti automaticamente di capire il tipo dietro le quinte e in Linux cerchi di sbarazzarsi di '', alcuni dei confronti sono anche basati sulla locale.
-
Pertanto,
' 2' > '10'
diventa'2'>'10'
e il confronto è'2'>'1'
; non sono uguali, quindi non è necessario continuare con il resto della stringa eascii('2')
è maggiore diascii('1')
, quindi restituisce true. -
Se fosse un'operazione di uguaglianza (ad es. ' 22' ='22 ') risulterebbe false perché Postgres esegue un confronto byte per byte. Questo è importante perché il motore utilizza due algoritmi diversi durante i confronti.
-
Se specifichi il tipo tramite typecasting, non sovrascriverà le regole dello spazio (
' '=>''
).
Il merito va anche a: RhodiumToad e Peerce in #postgresql