mysql LOAD DATA - znieksztalcone polskie znaki

0

Witam,

Mam plik z danymi w postaci:

1|rekord1|rekord2
2|rekord1|rekord2

i importuje z niego dane za pomoca LOAD DATA w taki sposob:

LOAD DATA LOCAL INFILE dane.txt' INTO TABLE `test` FIELDS TERMINATED BY '|' LINES TERMINATED BY '\r\n'

Działa jak trzeba z jednym wyjatkiem - polskie litery nie sa importowane tak jak trzeba - w phpMyAdmin sa wyswietlane krzaczki.

Pola w tebeli maja ustawione kodowanie utf8_general_ci, a plik jest zapisany w utf8 (za pomoca EditPlus). Co moge zrobic, zeby polskie znaki byly przetwarzane prawidlowo?

0

przed zapisem konwertuj do kodowania mysql_client_encoding() czy jakos tak, ew. jak masz dostęp do serwera, zmień kodowanie domyślne

0

Hmm kodowanie domyslne.......

ALTER TABLEtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

Bez zadnych zmian.

0

zapytaniem tego nie zmienisz - to sie zmienia w konfigu php, albo mysql dla całego klienta - nie robiłem tego, więc nie pamietam dobrze

0

Tak jak napisal tomkiewicz - przekonwertuj zbior wejsciowy do kodowania jakie akceptuje baza. Oszczedzisz sobie kupe nerw.

0

Ok, tylko pytanie czym to przekonwertowac? na mysql_client_encoding() ? Mam to robic z poziomu php (raczej nie da rady za duzy plik), czy jakims programem?

Probowalem chyba wszystkich rodzajow kodowania dostepnych w EditPlus ale ciagle polskie znaki mi znieksztalca :|

[edit]
Nie doczytalem posta tomkiewicza powyzej - poszukam w necie jak sie to zmienia, ale tak jak wyzej napisalem wyprobowalem wszystkie rodzaje kodowania z EditPlus

[edit2]
Bede jednak upierdliwy - niech mi to ktos wyjasni, bo nie wiem o co chodzi.

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

Czyli domyslne kodowanie mam jakie? latin1? czy utf8? Ktore kodowanie mam zmienic i jak? Szukalem w google ale nic konkretnego znalezc nie moge :/

Pliku do latin1 chyba konwertowac nie moge, bo strace polskie znaki a jezeli jest zapisany w utf8 to sytuacja jak w moim pierwszym poscie

[edit3]
Ok pogooglowalem sobie jeszcze troche i wyczytalem ze to bug w mysql (cos o ignorowaniu ustawien kodowania). W kazdym razie poradzilem sobie tak (mozna powiedziec, ze obejscie problemu):

ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci

Czyli zmiana kodowania domyslnego dla calej bazy, a nie tylko dla tabeli. Teraz działa, wiec chyba problem rozwiazany

1 użytkowników online, w tym zalogowanych: 0, gości: 1