Mam problem z sortowaniem polskich znaków w UTF-8
na PostgreSQL 8.2, który stoi (... ech...) na Windowsie XP :/
Niestety póki co tak musi być i zanim przejdę na Linuxa, to
trochę czasu minie, a sortowanie musi już teraz działać poprawnie.
Błąd polega na tym, że ogonki są wyswietlane na końcu.
Przeszukałem google i wiem, że trzeba pogrzebać w zmiennych
środowiskowych locale, ale gdzie one są w Windowsie?
Aha, kodowanie musi być UTF-8, tego nie mogę zmienić :/
Dzięki za pomoc.
Kamil.
> óki co tak musi być i zanim przejdę na Linuxa, to
> trochę czasu minie, a sortowanie musi już teraz działać poprawnie.
> Błąd polega na tym, że ogonki są wyswietlane na końcu.
> Przeszukałem google i wiem, że trzeba pogrzebać w zmiennych
> środowiskowych locale, ale gdzie on
1) Jak masz bazę jednojęzyczną to inicjując cluster;
initdb --locale=pl_PL.UTF-8 (nie wiem jak to się robi w łindołsach.
2) nls_string (też nie wiem, czy to dygnie na łindowsach.
3) wypier.. te łindowsy.
Ech... najłatwiej powiedzieć: wyper... Windowsa :/
Muszę chyba zrobić konferencję z klientem i przekonać
go do Linuxa, a jednocześnie uświadomić, że wyrzucił
pieniądze w błoto, kupując Windowsy.
Kamil.
Nie wiem, ja używam pgsql pod linuxem i windowsami i z żadnym nie mam
problemów. Zanim zaczniesz zrywać podłogę, sprawdź na czymś prostym i
skutecznym, np pgAdminie.
artur
pgAdmin:
create table t1(a char);
show server_encoding;
zwraca UTF-8
insert into t1 values('a');
insert into t1 values('ą');
insert into t1 values('ł');
insert into t1 values('z');
insert into t1 values('ż');
select a from t1 order by a;
wynik:
a
z
ą
ł
ż
:/
Kamil
Hmm.. a próbowałeś server_encoding na latin2 a client_encoding na
unicode ? To może zadziałać.
Pozdrawiam
Rony
client_encoding próbowałem już na unicode, utf-8, latin2
a zaś jak dodam server_encoding do postgresql.conf to
po restarcie serwera, nie uruchamia się ponownie :| Nie
ma takiej właściwości? Dziwne.
Kamil.
Kodowanie po stronie serwera ustalasz podczas tworzenia bazy (btw. każda
może mieć inne, to zależy tylko od Ciebie).
Proponowałem, abyś założył bazę z kodowaniem LATIN2
a po stronie klienta ustawił sobie unicode i tak wprowadzał dane.
Z dokumentacji wynika, że to powinno zadziałać (patrz 17.10. Client
Connection Defaults).
BTW. u mnie działa - 8.1, XP Pro SP2
Pozdrawiam
Rony
select * from pg_settings where name like 'lc_%'
za sortowanie odpowiada lc_collate.
jedynym sposobem jego zmiany jest ponowne wywołanie initdb.
czyli :
pg_dumpall > backup/all.sql
cp $PGDATA/*.conf backup/
pg_ctl stop
rm -rf $PGDATA
initdb --locale=pl_PL ( pod win32 locale może się nazywać inaczej )
cp backup/*.conf $PGDATA/
pg_ctl start
psql < backup/all.sql
i tu od nowa popełniasz błąd, który już został popełniony:
initdb --locale=pl_PL.UTF-8 ( pod win32 locale może się nazywać inaczej )
> Muszę chyba zrobić konferencję z klientem i przekonać
> go do Linuxa,
a po co do Linux-a ?
namów go na jakiegos risc-a - np: z AIX-em
klient bedzie szcześliwy , ty zarobisz troche kasy. Za administrowaniem
systeme bedziesz brał wiecej niz za te łindołsy
--
p.
Irek
Otrzymuję taki komunikat:
initdb: invalid locale name "pl_PL.UTF-8"
A potem:
The databaes cluster will be initialized with locale Polish_Poland.1250.
Zresztą pl_PL też nie zrozumiał.
:/
Kamil
Kamil.
Kamil.
a spróbuj na hama: Polish_Poland.UTF-8 albo Polish_Poland.UNICODE
Nie byłbym taki pewien, czy dobrze sortuje, ba jak sam piszesz masz bazę w
unicode i jak wrzucisz do tej bazy w Polish_Poland.1250 bazę w unikodzie to
poraszka.
Pozdrawiam
--
Archiwum grupy: http://niusy.onet.pl/pl.comp.bazy-danych
a polski utf-8 to podobno Polish_Poland.65001
ale nie testowałem więc nie powiem czy działa
Pozdrawiam Rafał
Polish_Poland.28592 działa i też jest dobrze posortowane :|
Stworzyłem na nowo tą tabelkę t1, tak jak pisałem kilka postów
wyżej i poprawnie posortowało.
Natomiast 65001 nie rozpoznaje i ustawia się na 1250 :/
Kamil.
Warto też zwrócić uwagę, że pgsql ma podobnie jak mysql możliwość ustawienia
przekodowywania znaków między klientem a serwerem, np:
SET CLIENT_ENCODING TO 'UTF8'
albo w PHP:
pg_set_client_encoding('UTF8');
Przyczyny złego kodowania mogą być 2: albo nieprawidłowe ustawienie
kodowania bazy, albo nieprawidłowe kodowanie na kliencie. Dlatego pisałem o
jakimś sprawdzonym narzędziu, żeby wyeliminować tę drugą przyczynę.
artur