Thread: BUG #2309: Wrong string comparison
The following bug has been logged online: Bug reference: 2309 Logged by: Yury Don Email address: yura@vpcit.ru PostgreSQL version: 8.1.3 Operating system: Linux (Debian) Description: Wrong string comparison Details: Looks like string comparison operators ignore spaces isnside of string. Because of this sorting on text fields is wrong. mdb=# select 'a z'::text>'ad'::text; ?column? ---------- t
"Yury Don" <yura@vpcit.ru> writes: > Looks like string comparison operators ignore spaces isnside of string. It's not wrong, it's just following the rules of the locale. You should initdb the database with LANG=C if you want plain ASCII sorting. regards, tom lane
Hi, On Mar 09 02:00, Yury Don wrote: > Looks like string comparison operators ignore spaces isnside of string. > Because of this sorting on text fields is wrong. > > mdb=# select 'a z'::text>'ad'::text; > ?column? > ---------- > t PostgreSQL relies on your locale for collation. Therefore, first you need to check if your locale settings are working. For instance: $ TEXT="a z\nad" $ echo -e $TEXT | LC_COLLATE=tr_TR.iso88599 sort ad a z $ echo -e $TEXT | LC_COLLATE=C sort a z ad Regards.
On Friday 10 March 2006 12:36, Volkan YAZICI wrote: > Hi, > > On Mar 09 02:00, Yury Don wrote: > > Looks like string comparison operators ignore spaces isnside of string. > > Because of this sorting on text fields is wrong. > > > > mdb=# select 'a z'::text>'ad'::text; > > ?column? > > ---------- > > t > > PostgreSQL relies on your locale for collation. Therefore, first you > need to check if your locale settings are working. For instance: > > $ TEXT="a z\nad" > $ echo -e $TEXT | LC_COLLATE=tr_TR.iso88599 sort > ad > a z > $ echo -e $TEXT | LC_COLLATE=C sort > a z > ad > > > Regards. > My locale is KOI8-R and sorting in PostgreSQL corresponds to sorting in locale. I just didn't expect that sorting will be this way ... -- Best regards, Yury Don