Myślę, że PostgreSQL automatycznie próbuje ustalić typ za kulisami, aw Linuksie próbuje pozbyć się „ ”, niektóre porównania są również oparte na lokalizacji.
-
Zatem
' 2' > '10'
staje się'2'>'10'
a porównanie to'2'>'1'
; nie są równe, więc nie trzeba kontynuować z resztą ciągu iascii('2')
jest większe niżascii('1')
, więc jest to prawda. -
Gdyby była to operacja równości (np. „22” =„22”), wynik byłby fałszywy, ponieważ Postgres porównuje bajt po bajcie. Jest to ważne, ponieważ podczas porównywania silnik używa dwóch różnych algorytmów.
-
Jeśli określisz typ za pomocą rzutowania typów, nie zastąpi to reguł spacji (
' '=>''
).
Również zasługa: RhodiumToad i Peerce w #postgresql