Мисля, че PostgreSQL автоматично се опитва да разбере типа зад кулисите и в Linux се опитва да се отърве от „ “, някои от сравненията също се основават на локал.
-
Така,
' 2' > '10'
става'2'>'10'
и сравнението е'2'>'1'
; те не са равни, така че няма нужда да продължавате с останалата част от низа иascii('2')
е по-голямо отascii('1')
, така че се оценява като true. -
Ако това беше операция за равенство (напр. ' 22' ='22 '), това ще доведе до false, защото Postgres прави сравнение байт по байт. Това е важно, защото машината използва два различни алгоритъма, когато прави сравнения.
-
Ако посочите типа чрез преобразуване на типове, той няма да замени правилата за пространство (
' '=>''
).
Също така заслугата е на: RhodiumToad и Peerce в #postgresql