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