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