The following bug has been logged online:
Bug reference: 3316
Logged by: Florian Wunderlich
Email address: fwunderlich@factor3.de
PostgreSQL version: 8.2.4
Operating system: Linux 2.6.15.6 (debian)
Description: upper() does not convert to upper case on database with
encoding utf-8 and locale de_DE
Details:
The database cluster has been initialized with locale=de_DE.
SHOW ALL shows all lc_ variables as "de_DE".
There are two databases: temp which has been created with encoding='utf-8',
and temp2 with encoding='iso-8859-1'.
Both databases are completely empty.
The console is running with encoding iso-8859-1. The following commands are
used in a file encoded in iso-8859-1:
set client_encoding='utf-8';
select upper('äöü');
In case the argument to upper() does not come out as expected: it is an
a-umlaut, o-umlaut and u-umlaut.
The following command is then used:
iconv -f iso-8859-1 -t utf-8 | psql temp | iconv -f utf-8 -t iso-8859-1
This converts the iso-8859-1 encoded file from above to utf-8 and converts
the psql output back to iso-8859-1.
For database temp, this yields "äöü" (lower case letters), while for
temp2, it yields "ÃÃÃ" (upper case letters), which is correct.
I did not find a bug report for this problem on pgsql-bugs or with Google.
It seems that there have been problems in the past with multibyte database,
but for 8.1, they have been fixed and using a multibyte database should work
fine.