Thread: BUG #1069: functions "lower()" and "upper()" not characterset-aware

BUG #1069: functions "lower()" and "upper()" not characterset-aware

From
"PostgreSQL Bugs List"
Date:
The following bug has been logged online:

Bug reference:      1069
Logged by:          Interzone

Email address:      info@interzone.gr

PostgreSQL version: 7.4

Operating system:   Linux 2.4.24

Description:        functions "lower()" and "upper()" not characterset-aware

Details:

the functions "lower()" and "upper()" do not seem to work correctly with
ISO_8859_7 values

Test case:
CREATE DATABASE mediagrk WITH TEMPLATE = template0 ENCODING = 'ISO_8859_7';
CREATE TABLE test1 (
   code serial NOT NULL,
   compname character varying(100) NOT NULL
);
INSERT INTO test1 VALUES (1, 'ÅËËÇÍÉÊÁ');
SELECT lower(compname) from test1;

if there is a problem (there might be) with the greek characters above, just
remember that this is a iso-8859-7 encoded text (and I changed the encoding
of the form-page to iso-8859-7 before sending).

Re: BUG #1069: functions "lower()" and "upper()" not characterset-aware

From
Tom Lane
Date:
"PostgreSQL Bugs List" <pgsql-bugs@postgresql.org> writes:
> the functions "lower()" and "upper()" do not seem to work correctly with
> ISO_8859_7 values

> CREATE DATABASE mediagrk WITH TEMPLATE = template0 ENCODING = 'ISO_8859_7';

upper/lower are driven by the database locale, not the encoding.

They are presently broken for multi-byte encodings, but I don't think
ISO_8859_7 is multi-byte.

            regards, tom lane

Re: BUG #1069: functions "lower()" and "upper()" not characterset-aware

From
InterZone
Date:
Tom Lane wrote:
> "PostgreSQL Bugs List" <pgsql-bugs@postgresql.org> writes:
>
>>the functions "lower()" and "upper()" do not seem to work correctly with
>>ISO_8859_7 values
>
>
>>CREATE DATABASE mediagrk WITH TEMPLATE = template0 ENCODING = 'ISO_8859_7';
>
> upper/lower are driven by the database locale, not the encoding.
>
> They are presently broken for multi-byte encodings, but I don't think
> ISO_8859_7 is multi-byte.

Well, ISO_8859_7 is not multi-byte, and you're right:
I had:
LC_COLLATE:                           C
LC_CTYPE:                             C

I tried
initdb -E ISO_8859_7 --locale=el_GR data1
and it all worked wonderfully.

>
>             regards, tom lane

Thanks a lot and sorry for the false alarm.
Regards
Interzone