<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - Różnice miedzy baza na windows'ie a na linux'ie]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=595</link>
		<description><![CDATA[Najświeższe odpowiedzi w Różnice miedzy baza na windows'ie a na linux'ie.]]></description>
		<lastBuildDate>Wed, 01 Jun 2011 09:26:19 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Odp: Różnice miedzy baza na windows'ie a na linux'ie]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2539#p2539</link>
			<description><![CDATA[Dzięki za pomoc, problem rozwiązany. Faktycznie kłopot sprawiało polecenie iconv które na potrzeby pracy pod windowsem zmieniłem z wywoływanego na shellu na wywoływane z php. Co dziwne polecenie to inaczej kodowało importowany plik. W wyniku czego sql dostawał krzaki i na nich się wywalał.

Temat do zamknięcia.]]></description>
			<author><![CDATA[dummy@example.com (norris_85)]]></author>
			<pubDate>Wed, 01 Jun 2011 09:26:19 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2539#p2539</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Różnice miedzy baza na windows'ie a na linux'ie]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2536#p2536</link>
			<description><![CDATA[Czyli COPY "wysypuje się" na pierwszej linii. Spróbuj odczytaj ten CSV przez edytor hex'owy (np [url=http://www.hhdsoftware.com/free-hex-editor]Hex Editor Neo[/url]). Jeśli rzeczywiście znajduje się tam bajt \xFF, to trzeba go wyciąć. Na [url=http://www.w3.org/International/questions/qa-forms-utf-8.en.php]tej stronie[/url] jest podane wyrażenie regularne, które sprawdza, które bajty są poprawne, można też posłużyć się narzędziem iconv (Linux) np.:

[code]iconv -f UTF-8 -t UTF-8 plik.csv[/code]]]></description>
			<author><![CDATA[dummy@example.com (gszpetkowski)]]></author>
			<pubDate>Mon, 30 May 2011 15:50:58 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2536#p2536</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Różnice miedzy baza na windows'ie a na linux'ie]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2533#p2533</link>
			<description><![CDATA[Jasne, że tak. Wszystko dzieje się w funkcji importu, już po wysłaniu pliku na serwer ftp, wiec przechwytując zapytanie dla konkretnego pliku i wywołując je bezpośrednio w pgAdminie otrzymałem:

[code]
QUERY:  COPY import.import_tmp_table_depozyty(col_1,col_2,col_3,col_4,col_5,col_6,col_7) FROM 'c:/ftp/reports/zasilenia/2011-05-30/I_DATA_DEPOZYTY_UROCZNIONE_1306710518.CSV' WITH DELIMITER '\t'  CSV ESCAPE '\\' HEADER 
CONTEXT:  PL/pgSQL function "insert_file" line 45 at EXECUTE statement
ERROR:  invalid byte sequence for encoding "UTF8": 0xff
CONTEXT:  COPY import_tmp_table_depozyty, line 1
SQL statement "COPY import.import_tmp_table_depozyty(col_1,col_2,col_3,col_4,col_5,col_6,col_7) FROM 'c:/ftp/reports/zasilenia/2011-05-30/I_DATA_DEPOZYTY_UROCZNIONE_1306710518.CSV' WITH DELIMITER '\t'  CSV ESCAPE '\\' HEADER "
PL/pgSQL function "insert_file" line 45 at EXECUTE statement

********** Błąd **********

ERROR: invalid byte sequence for encoding "UTF8": 0xff
Stan SQL:22021
Kontekst:COPY import_tmp_table_depozyty, line 1
SQL statement "COPY import.import_tmp_table_depozyty(col_1,col_2,col_3,col_4,col_5,col_6,col_7) FROM 'c:/ftp/reports/zasilenia/2011-05-30/I_DATA_DEPOZYTY_UROCZNIONE_1306710518.CSV' WITH DELIMITER '\t'  CSV ESCAPE '\\' HEADER "
PL/pgSQL function "insert_file" line 45 at EXECUTE statement

[/code]]]></description>
			<author><![CDATA[dummy@example.com (norris_85)]]></author>
			<pubDate>Mon, 30 May 2011 07:11:26 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2533#p2533</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Różnice miedzy baza na windows'ie a na linux'ie]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2532#p2532</link>
			<description><![CDATA[UNICODE jest to alias na UTF-8, więc pod tym względem się zgadza. Byłbyś w stanie przeprowadzić testowo import tego CSV bezpośrednio przez polecenie COPY w pgAdmin tzn. z pominięciem PHP ?]]></description>
			<author><![CDATA[dummy@example.com (gszpetkowski)]]></author>
			<pubDate>Fri, 27 May 2011 13:29:41 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2532#p2532</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Różnice miedzy baza na windows'ie a na linux'ie]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2531#p2531</link>
			<description><![CDATA[Funkcja jest wywoływana z poziomu php poleceniem

[code]$sql = "select import.insert_file('" . $productName . "', '" . $this->fileInfo['markedFileName'] . "', 'c:/ftp/reports/" . $this->fileInfo['remotePaath'] . "');";[/code]

które jest dalej powinno przejść przez

[code]
        try {
            $resp = $db->fetchAll($sql);
            return true;
        } catch (Exception $e) {
            diee($e);
            return false;
        }
[/code]

podczas gdy wynikiem jest wspomniany przeze mnie exeption. W samej funkcji faktycznie użyte jest zapytanie COPY ale nie tylko. Wszystko działa jednak poprawnie podczas odpytywania bazy stojącej na linuxie. Problem pojawia się podczas odpytywania bazy stojącej na windzie, stąd moje wszelkie podejrzenia idą w kierunku niewłaściwych LC_COLLATE i LC_CTYPE.

Zainstalowanego mam postgresa w wersji 9.0.4-1 i do administracji używam pgAdmin III. W związku z wywoływaniem tej funkcji z poziomu php i takim samym zwracaniem Exeption nie otrzymuje żadnego HINTa. 

W wyniku zapytań o których wspomniałeś dostaję odpowiednio UTF-8 i UNICODE.]]></description>
			<author><![CDATA[dummy@example.com (norris_85)]]></author>
			<pubDate>Fri, 27 May 2011 07:30:50 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2531#p2531</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Różnice miedzy baza na windows'ie a na linux'ie]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2530#p2530</link>
			<description><![CDATA[Lokalizacja pl_PL.UTF-8 (czyli m.in. LC_CTYPE i LC_COLLATE) powinna być kompatybilna Polish_Poland.1250 w tym sensie, że to drugie jak najbardziej pozwala tworzyć/obsługiwać bazy danych w kodowaniu UTF-8. W jaki sposób jest wywoływana ta funkcja (psql, pgadmin), przez COPY (tudzieź \copy) ? Co zwracają polecenia:

[code]SHOW server_encoding ;
SHOW client_encoding ;[/code]

Prawdopodobnie przy komunikacie błędu jest jeszcze jest wskazówka:

[quote]HINT: This error can also happen if the byte sequence does not match
the encoding expected by the server, which is controlled by
"client_encoding".[/quote]

Ew. problemem może być także różnica wersji PostgreSQL, np. nowsza może nie przyjmować błędnie zakodowanych znaków w pliku.]]></description>
			<author><![CDATA[dummy@example.com (gszpetkowski)]]></author>
			<pubDate>Thu, 26 May 2011 15:13:21 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2530#p2530</guid>
		</item>
		<item>
			<title><![CDATA[Różnice miedzy baza na windows'ie a na linux'ie]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2529#p2529</link>
			<description><![CDATA[Mam bazę postawioną na linux'ie która pracuje z prawidłowo z aplikacją napisaną w php. Próbując zrobić kopię tej bazy dla testowania lokalnego na windzie natknąłem się na problem dotyczący kodowania. Przy tworzeniu nowej bazy ustawiłem jej kodowanie na utf-8 i z powodzeniem wrzuciłem do niej dane z oryginalnej bazy linuxowej. Wydawało się, że wszystko śmiga dobrze aż do momentu kiedy próbowałem wywołać funkcję przepisującą dane z pliku .csv do tabeli w bazie. Wywaliło mi taki exeption:

SQLSTATE[22021]: Character not in repertoire: 7 ERROR:  invalid byte sequence for encoding "UTF8": 0xff

Plik, który próbuje przepisać jest w utf-8, podobnie jak baza. porównując dokładniej różnicę miedzy oryginalna bazą a tą stworzoną przeze mnie na windzie zauważyłem różnicę w ustawieniach porównania i typu znakowego. Na linuxie wszystko ustawione jest na pl_PL.UTF-8, podczas gdy na windowsowa baza przyjęła ustawienia Polish_Poland.1250 mimo ze kodowanie bazy jest ustawione na utf-8.

Może mi ktoś pomóc i podpowiedzieć jak zmienić to porównywanie i typ znakowy w mojej windowsowej kopii?]]></description>
			<author><![CDATA[dummy@example.com (norris_85)]]></author>
			<pubDate>Thu, 26 May 2011 09:43:23 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2529#p2529</guid>
		</item>
	</channel>
</rss>
