[Postgresql] dziwne kodowanie
Jacek Stempkowski - 28-06-2006 00:09
[Postgresql] dziwne kodowanie
W postgresie mam bazę która ma ENCODING = 'WIN' Ponieważ przenoszę bazę na inny serwer chciałbym przy okazji zmienić jej kodowanie na LATIN2. Czy ktoś wie jak można to zrobić ? zrobiłem dumpa do pliku, zmieniłem w tym pliku na ENCODING='LATIN2' i wgrałem na nowym serwerze, ale niestety nie mam polskich znaków (łącząc się przez odbc) Testowałem set client encoding w odbc, bez rezultatu. Próbowałem przepuścić plik przez iconv ale tam nie ma kodowania WIN Prosiłbym nieśmiało o pomoc .
Marek TROFIMIUK - 28-06-2006 00:09
Jacek Stempkowski <jacek_stempkowski@o2.pl> wrote: > W postgresie mam bazę która ma ENCODING = 'WIN' > Ponieważ przenoszę bazę na inny serwer chciałbym przy okazji zmienić jej > kodowanie na LATIN2. > Czy ktoś wie jak można to zrobić ? > zrobiłem dumpa do pliku, zmieniłem w tym pliku na ENCODING='LATIN2' i > wgrałem na nowym serwerze, ale niestety nie mam polskich znaków (łącząc się > przez odbc) > Testowałem set client encoding w odbc, bez rezultatu. > Próbowałem przepuścić plik przez iconv ale tam nie ma kodowania WIN > Prosiłbym nieśmiało o pomoc .
Jeśli ENCODING = 'WIN' dotyczy WIN1250 lub WIN1251, to na pewno istnieją (chyba nawet są instalowane standardowo) tablice konwersji w iconv. Sprawdź sekcję NOTES w manie.
p. -- Marek Trofimiuk < mt20863 (at) sgh waw pl > Primary key fingerprint: FA3C 14D8 020F FA0C 70AE 930C F63F F04B 2ADD 9DD7
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 28-06-2006 00:09
Jacek Stempkowski wrote: > W postgresie mam bazę która ma ENCODING = 'WIN' > Ponieważ przenoszę bazę na inny serwer chciałbym przy okazji zmienić jej > kodowanie na LATIN2. > Czy ktoś wie jak można to zrobić ? > zrobiłem dumpa do pliku, zmieniłem w tym pliku na ENCODING='LATIN2' i > wgrałem na nowym serwerze, ale niestety nie mam polskich znaków (łącząc się > przez odbc)
W dumpie jest podane kodowanie dumpa i bez sensu jest go ruszać. Tak na prawdę nie ma znaczenia w jakim kodowaniu jest baza. Ważne jest, żeby ustawione kodowanie zgadzało się z rzeczywistym kodowaniem danych.
Stwórz bazę z kodowaniem jakim chcesz, wrzuć dumpa nic w nim nie grzebiąc, czytaj dane ustawiając na począstką połączenia SET client_encoding = 'LATIN2' lub inne jakie potrzebujsz.
I wszystko będzie działało.
-- P.M.
Jacek Stempkowski - 30-06-2006 00:08
> W dumpie jest podane kodowanie dumpa i bez sensu jest go ruszać. > Tak na prawdę nie ma znaczenia w jakim kodowaniu jest baza. Ważne jest, > żeby ustawione kodowanie zgadzało się z rzeczywistym kodowaniem danych. > > Stwórz bazę z kodowaniem jakim chcesz, wrzuć dumpa nic w nim nie > grzebiąc, czytaj dane ustawiając na począstką połączenia > SET client_encoding = 'LATIN2' lub inne jakie potrzebujsz. > > I wszystko będzie działało. > > -- > P.M.
Dzięki za pomoc ale niestety nadal mam problemy. Sytuacja wygląda następująco. 1) Plik dumpa (ze starej bazy) ma jedną z początkowych linii : CREATE DATABASE baza_tmp WITH OWNER = wlasciciel_bazy TEMPLATE = template0 ENCODING = 'WIN'; 2) Nowy serwer : zrobiłem initdb --encoding='LATIN2' 3) Na nim założyłem bazę z kodowaniem LATIN2 :CREATE DATABASE baza_tmp WITH OWNER = wlasciciel_bazy ENCODING = 'LATIN2' TABLESPACE = pg_default;
sprawdzam : psql -l List of databases Name | Owner | Encoding -----------+----------+---------- baza_tmp | wlasciciel_bazy | LATIN2 postgres | postgres | LATIN2 template0 | postgres | LATIN2 template1 | postgres | LATIN2 (4 rows)
4) wgrywam dumpa (psql > \i /plik_dumpa.sql 5) w ODBC (windows xp) dodaje set client_encoding ='LATIN2' I nie mam znaków ąśź pozostałe są. Jeżeli podłącze się do bazy psql'em też brak polskich znaków śąź Natomiast jeżeli zrobię wszystkie te kroki zamiast LATIN2 użyję WIN1250 to wszystko wygląda ok, ale błędnie się sortuje. Czy istniej możliwość uzyskania i polskich znaków i poprawnego sortowania ? konwersja pliku dumpa iconv może być trudna bo plik dumpa ma 3GB i iconv go nie otworzy. Ktoś może ma pomysł ?
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 30-06-2006 00:08
Jacek Stempkowski wrote: > > Dzięki za pomoc ale niestety nadal mam problemy. > Sytuacja wygląda następująco. > 1) Plik dumpa (ze starej bazy) ma jedną z początkowych linii : CREATE > DATABASE baza_tmp WITH OWNER = wlasciciel_bazy TEMPLATE = template0 ENCODING > = 'WIN';
Tą linie możesz wyrzucić, jeśli sam stworzyłeś bazę, albo zmienić encoding;
> 2) Nowy serwer : zrobiłem initdb --encoding='LATIN2' > 3) Na nim założyłem bazę z kodowaniem LATIN2 :CREATE DATABASE baza_tmp WITH > OWNER = wlasciciel_bazy ENCODING = 'LATIN2' TABLESPACE = pg_default; > > sprawdzam : psql -l > List of databases > Name | Owner | Encoding > -----------+----------+---------- > baza_tmp | wlasciciel_bazy | LATIN2 > postgres | postgres | LATIN2 > template0 | postgres | LATIN2 > template1 | postgres | LATIN2 > (4 rows) > > 4) wgrywam dumpa (psql > \i /plik_dumpa.sql > 5) w ODBC (windows xp) dodaje set client_encoding ='LATIN2'
Z tego co wiem, XP ma kodowanie WIN1250 i takie w tym kroku powinienes ustawić.
> Natomiast jeżeli zrobię wszystkie te kroki zamiast LATIN2 użyję WIN1250 to > wszystko wygląda ok, ale błędnie się sortuje.
Z sortowaniem to nie wiem dlaczego źle, mnie zawsze sortuje dobrze. :) Ale też zawsze używam LATIN2 w bazie.
> Czy istniej możliwość uzyskania i polskich znaków i poprawnego sortowania ?
Moim zdaniem popełniłeś błąd w kroku 5.
-- P.M.
Zbigniew =?iso-8859-2?Q?=A3=EAcki?= - 30-06-2006 00:08
In article <e809gl$rg6$1@nemesis.news.tpi.pl>, Jacek Stempkowski wrote:
> 4) wgrywam dumpa (psql > \i /plik_dumpa.sql > 5) w ODBC (windows xp) dodaje set client_encoding ='LATIN2' > Ktoś może ma pomysł ? Jeśli łączysz się przez ODBC z windowsów, to raczej client_encoding="WIN1250", bo nie podejrzewam, żebyś w aplikacji windowsowej miał LATIN2. Na razie tyle moich pomysłów. Sprawdź, i powiedz, czy działa. dump bazy robiłeś pg_dump, czy pg_dumpall?
pozdrawiam. zbig
Jacek Stempkowski - 30-06-2006 00:08
Użytkownik "Zbigniew Łęcki" <zbig_bezspamu_@mkw.spam_won.lublin.pl> napisał w wiadomości news:slrnea7d3n.h22.zbig_bezspamu_@Zbigniew.Lecki. .. > In article <e809gl$rg6$1@nemesis.news.tpi.pl>, Jacek Stempkowski wrote: > >> 4) wgrywam dumpa (psql > \i /plik_dumpa.sql >> 5) w ODBC (windows xp) dodaje set client_encoding ='LATIN2' >> Ktoś może ma pomysł ? > Jeśli łączysz się przez ODBC z windowsów, to raczej > client_encoding="WIN1250", bo nie podejrzewam, żebyś w aplikacji > windowsowej miał LATIN2. > Na razie tyle moich pomysłów. Sprawdź, i powiedz, czy działa. > dump bazy robiłeś pg_dump, czy pg_dumpall?
używałem pg_dumpall. W nowej wersji postgresa jest parametr do pg_dump -E gdzie można ustwiać kodowanie - spróbuję tędy. W odbc ustawiałem set client_encoding='Latin2' oraz set client_encoding='win1250' i w obydwu przypadkach nie wyświetla prawidłowo wszystkich polskich znaków.
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 30-06-2006 00:08
Jacek Stempkowski wrote: > Użytkownik "Zbigniew Łęcki" <zbig_bezspamu_@mkw.spam_won.lublin.pl> napisał > w wiadomości news:slrnea7d3n.h22.zbig_bezspamu_@Zbigniew.Lecki. .. >> In article <e809gl$rg6$1@nemesis.news.tpi.pl>, Jacek Stempkowski wrote: >> >>> 4) wgrywam dumpa (psql > \i /plik_dumpa.sql >>> 5) w ODBC (windows xp) dodaje set client_encoding ='LATIN2' >>> Ktoś może ma pomysł ? >> Jeśli łączysz się przez ODBC z windowsów, to raczej >> client_encoding="WIN1250", bo nie podejrzewam, żebyś w aplikacji >> windowsowej miał LATIN2. >> Na razie tyle moich pomysłów. Sprawdź, i powiedz, czy działa. >> dump bazy robiłeś pg_dump, czy pg_dumpall? > > używałem pg_dumpall. W nowej wersji postgresa jest parametr do pg_dump -E > gdzie można ustwiać kodowanie - spróbuję tędy. > W odbc ustawiałem set client_encoding='Latin2' oraz set > client_encoding='win1250' i w obydwu przypadkach nie wyświetla prawidłowo > wszystkich polskich znaków.
Przyjrzałem się dumpowi z 7.3 i wygląda, że on nie ustawia client_encoding. Dopisz na poczatek dumpa: SET client_encoding = 'WIN1250';
-- P.M.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[PostgreSQL] - jak =?ISO-8859-2?Q?zabezpieczy=E6_interesy_tw?==?ISO-8859-2?Q?=F3rcy_systemu_=3F=3F=3F?=
postgresql - int/int
postgresql Select count(*) czy raczej Select count(ID)
[PostgreSQL] jak =?ISO-8859-2?Q?pobra=E6_warto=B6=E6_zwracan?==?ISO-8859-2?Q?=B1_przez_funkcj=EA=3F?=
[postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?=
[postgresql] kilka =?ISO-8859-2?Q?rekord=F3w_subquery_jako_?==?ISO-8859-2?Q?string?=
[PostgreSQL] Jak =?ISO-8859-2?Q?po=B3=B1czy=E6_funkcje_z_w?==?ISO-8859-2?Q?idokiem?=
Postgres - replikcja master-master
Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL]
Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?=
zanotowane.pldoc.pisz.plpdf.pisz.plradioaktywni.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|