Re: BUG #4999: select 'a' < 'A' is true, but should be false . . . - Mailing list pgsql-bugs

From Peter Eisentraut
Subject Re: BUG #4999: select 'a' < 'A' is true, but should be false . . .
Date
Msg-id 1251104017.10096.6.camel@vanquo.pezone.net
Whole thread Raw
In response to BUG #4999: select 'a' < 'A' is true, but should be false . . .  ("Brian Ceccarelli" <ceccareb@talussoftware.com>)
Responses Re: BUG #4999: select 'a' < 'A' is true, but should be false . . .  ("Brian Ceccarelli" <ceccareb@talusmusic.com>)
List pgsql-bugs
On tor, 2009-08-20 at 20:24 +0000, Brian Ceccarelli wrote:
> since the < and > comparison operators seem to be case insensitive:
>
> select 'a' < 'Z';    -- true
> select 'a' < 'z';    -- true
> select 'A' < 'Z';    -- true
> select 'A' < 'z';    -- true
>
> select 'z' < 'A';    -- false
> select 'z' < 'a';    -- false
> select 'Z' < 'A';    -- false
> select 'Z' < 'a';    -- false
>
> Any case A is < any case Z implies case-insensitive compare.    Which would
> imply that 'a' = 'A', but 'a' < 'A' is true.

No, they are not "case insensitive".  The way this works is with a
multipass comparison algorithm: First, the letters are compared
independent of case, then the case is compared.  There is also an
additional pass for comparing accents, but I forget at the moment which
pass that is.  Search for Unicode collation algorithm, if you are
interested.

pgsql-bugs by date:

Previous
From: Alvaro Herrera
Date:
Subject: Re: BUG #5005: unique constraint considers nulls to be equal
Next
From: Sébastien Lardière
Date:
Subject: Re: BUG #5004: pg_freespacemap make a SegFault