PostgreSQL lower() vs. encoding

Üdv!

A PostgreSQL 8.0-ás szerveren a

select lower('manó')

parancs a "man" stringet adja vissza, az "ó" elvész valahol. A zadatbázis encoding UNICODE, a client_encoding szintén. Mi a baja???
Valaki segítsen már szegény nyomorult vasárnapi programozón... :-)

Előre is kösz.

Hozzászólások

hello,

Nálam iso-8859-2 a default locale - és a fenti sql jól fut le, sõt az upper is jól kezeli az ékezeteket -, ezért Unicode-hoz nem tudok hozzászólni, de:
1. A PG 8.1-tõl a kliens oldalon nem kell és nem is lehet encoding-ot megadni, a serverhez nincs már initdb sem!
2. encoding-ot a createdb-ben lehet megadni -E kapcsoló után. Ha ilyet nem adtál, akkor valószínüleg a default locale lesz az encoding. Ha az nálad nincs beállítva, akkor C az alapértelmezett, ebbõl ASCII lesz az encoding. A pg8 manuál azt írja, hogy nem ajánlott ezt használni. Abban nincs is ékezetes, tehát jogos lehet amit mond.
Arra is vigyázz, hogy a locale-t a postgres usernek is állítsd be a kívánatosra.

Volt egy regi bug 7.x-ig amit kijavitottak, de picit bugos volt a javitas is. Nezz changelogot talan olyan 8.0.3 korul javitottak (lehet hogy elobb).

Azért evvel mindig vigyázni kell, ha előfordulhat, hogy költözik a kód. Én emiatt nem merek adatbázisban ilyenekben bízni, inkább kódban kezelem a locale-lel kapcsolatos dolgokat, a psql hagyja békén a stringjeimet :)