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

Started by PostgreSQL Bugs Listabout 22 years ago3 messagesbugs
Jump to latest
#1PostgreSQL Bugs List
pgsql-bugs@postgresql.org

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).

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: PostgreSQL Bugs List (#1)
Re: BUG #1069: functions "lower()" and "upper()" not characterset-aware

"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

#3InterZone
info@interzone.gr
In reply to: Tom Lane (#2)
Re: BUG #1069: functions "lower()" and "upper()" not characterset-aware

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