Błąd kodowania przy exporcie i imporcie bazy

By | 18-01-2010

Zdarzyło się Wam exportować bazę z jednego serwera, importować na drugi i nagle zamiast polskich znaków mamy krzaczki, albo znaki zapytania? Wiele godzin spędziłem by wpaść na jakiś prosty pomysł, jak pozbyć się tego problemu, udało się.

Zdarzało mi się przenosić bazy danych z jednego serwera na drugi, jeden miał inne parametry od drugiego, inne kodowanie, inna wersja MySQL, przy exporcie bazy danych, zamiast polskich znaków pojawiały się znaki zapytania, lub krzaczki. Przeczytałem wiele artykułów, które pośrednio mi pomogły, jednak żaden z nich nie był stuprocentowym rozwiązaniem mojego problemu. Jedno rozwiązanie mówiło, żeby wpisać „SET NAMES”inne zczytywały bazę z pliku i zapisywały od nowa, inne polegały po prostu na„znadź/zamień”… a krzaki jak były, tak były nadal. Dopiero po kompilacji wszystkich przeczytanych pomysłów, udało się przenieść bazę z naszymi ojczystymi ą ę ć…

Najpierw trochę teorii, dlaczego tak się dzieje? Otóż baza może być zakodowana w LATIN2 (ISO-8859-2) a w środku tabel dane zakodowane w UTF-8 i pojawia się problem. W momencie exportu bazy mamy wybór kodowania, wybierzmy wtedy jeszcze inny niż powinniśmy i jesteśmy w lesie.

Oto krok po kroku moje rozwiązanie, może nie najlepsze, najkrótsze, ale skuteczne:

1) importujemy bazę z jednego serwera do pliku

2) otwieramy sobie w notatniku i na samym początku dopisujemy deklarację kodowania UTF8 albo LATIN2

SET NAMES „UTF8”;

3) niektóre poradniki twierdzą, że to wystarczy… gucio… należy jeszcze zmienić wszystkie wpisy dotyczące kodowania, na ten który wybraliśmy na górze pliku i zamienić wszystkie

CHARACTER SET utf8 COLLATE utf8_polish_ci;

4) teraz pozostaje zrobić rzecz, której próbowałem uniknąć, ale nie kosztowało mnie to wiele czasu, a w porównaniu z tym ile go spędziłem wczesniej przy próbach importu i exportu, otworzyłem tą samą bazę w jakimś notatniku, który daje wybór kodowania (nie konwersję, tylko rozwoznanie lub ustawienie kodowania) ustawiłem na ten który wybrałem np. utf8 i wtedy się zaczeła metoda „znajdź/zamień”, wszystkie krzaczki zapisywane podwójnymi znakami w moim wypadku zamieniałem na Ą ą Ę ę… zapisałem, zapimportowałem wybierając kodowanie utf8 i śmiga…

Wszystko można zrobić tez w drugim kierunku z utf8 na latin2. Mam nadzieje, że w miarę proste, choć mam pojęcie, że metoda „znajdź/zamień” nie jest tu krzykiem nowoczesnych technologii co raczej łopatologii stosowanej, ale co nie na siłę, to młotkiem…

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *


dwa × pięć =