publikacja: 23 listopada 2008, 16:08; autor: Szymon Skulimowski http://wpninja.pl/konwertowanie-bazy-danych-na-utf-8/

Konwertowanie bazy danych na UTF-8

Po przeniesieniu WordPressa na inny serwer lub wgraniu kopii bezpieczeństwa na obecny spotkać nas może niemiła niespodzianka spowodowana błędnym kodowaniem bazy danych – zamiast polskich liter ze znakami diakrytycznymi widnieć będą dziwne krzaczki (np. ź, ż, Ä™, “, Ä… itp.).

Poniżej dwa sposoby rozwiązania tego problemu.

Ręczna robótka metodą „znajdź i zamień”

W teorii przedstawia się ona następująco:

  • wykonaj zrzut bazy danych,
  • otwórz otrzymany plik .sql edytorem tekstowym (np. PSPadem) z kodowaniem UTF-8,
  • przejrzyj pobieżnie plik a gdy natrafisz na krzak wywnioskuj z kontekstu jaką literę zastępuje i następnie skorzystać z funkcji „zamień…”,
  • powtórzy czynność z poprzedniego punktu dla wszystkich napotkanych krzaków.

"Seek and destroy!"

Metoda ta, mimo iż całkiem skuteczna, jest straszliwie czasochłonna. Robiłem to wczoraj w nocy (przy okazji przenoszenia strony „Orientuj się” na nowy serwer) przez 2 godziny i polecam tylko w ostateczności :-).

Automatyczna konwersja dzięki wtyczce

Wtyczka bbWP2UTF8 w parę sekund wykona całą czarną robotę. Wystarczy aktywować ją na WordPressie z krzaczkami i podążać za wskazówkami:

  • Step 1: Convert columns to binary counterparts for checked tables
  • Step 2: Convert tables to UTF8 character set
  • Step 3: Convert database default character set to UTF8
  • Step 4: Convert columns back from binary to original types

Panel do zarządzania wtyczką

Jedyną rzeczą z jaką wtyczka sobie nie radzi to nazwy kategorii – te trzeba już ręcznie zmienić:

Brak wsparcia dla nazw kategorii

Efekt końcowy

Przed:

Przed konwersją

Po:

Po konwersji

Komentarze (16)

  1. czara (23 listopada 2008, 16:16) #:

    do konwersji znaków można użyć też Gżegżółki http://www.gzegzolka.com/
    robi to automatycznie w całym pliku *.sql

  2. yatsen (23 listopada 2008, 16:42) #:

    żebym to miał dwa lata wstecz…. eh

  3. Lanooz (23 listopada 2008, 17:53) #:

    Neigdyś ręcznie wszystko poprawiałam. Tragedia. Następnym razem już z drobną pomocą szybciej rozwiązałam problem. A raczej go pominęłam -ustawiając odczytywanie bazy nie jako utf tylko jak latin1 lub latin2 :P
    Ale widzę, że jest i wtyczka do tego. Kurcze, zdecydowanie ją zbookmarkuję.

  4. Lanooz (23 listopada 2008, 17:54) #:

    Tylko czy wtyczka działa dla wp 2.6?

  5. Szymon Skulimowski (23 listopada 2008, 17:57) #:

    Tylko czy wtyczka działa dla wp 2.6?

    Sprawdzałem na 2.6.3 i działa wyśmienicie. :-)

  6. Tomek (23 listopada 2008, 18:10) #:

    Najlepiej to eksportować / importować bazę po ssh :) No ale nie na każdym hostingu mamy dostęp :(

  7. dejavu24 (23 listopada 2008, 19:24) #:

    no właśnie jak najlepiej robi się export bazy? Ja zawsze najpier optymalizuje, naprawiam, zaznaczam pełne dodanie i wszystko, fakt ze jeszcze na wp nie musiałem się tym zajmować, no ale warto wiedzieć

  8. palmiak (23 listopada 2008, 20:55) #:

    Poleceniem iconv też zawsze można. Jeszcze to prostsze niż instalowanie wtyczek czy ręczna zamiana.

  9. Malin (23 listopada 2008, 22:56) #:

    Jest jeszcze jeden sposób, IMO najprostszy: wyedytowanie pliku wp-db.php, znajdującego się w folderze wp-includes. Wszystko sprowadza się do dodania takiego wiersza: mysql_query(„SET NAMES ‚utf8′”); w odpowiednie miejsce ww. pliku.

    Sposób przetestowałem dwukrotnie gdy po przenosinach Wordpressa miałem krzaki zamiast polskich znaków, zawsze działało. Więcej informacji tutaj (stąd mam ten sposób): http://www.miasik.net/archive/2006/10/wordpress-i-zmiana-hosta/

    Tyle tylko, że w moim pliku jest to w okolicy wiersza 319, nie 43, jak opisano pod powyższym linkiem. Ale to pewnie dlatego, że od 2006 roku, gdy post był napisany, sporo się w Wordpressie zmieniło.

    Jest jednak jeden problem: trzeba o tym pamiętać przy aktualizacji Wordpressa, bo wtedy ten plik zostaje nadpisany i trzeba operację powtórzyć.

  10. Tomek (24 listopada 2008, 0:05) #:

    Jest jeszcze inna opcja. Za pomocą zewnętrznego skryptu do obsługi bazy, np. http://www.mysqldumper.de/en/ :)

  11. tom (24 listopada 2008, 10:50) #:

    Ciekawy zbieg okoliczności. Właśnie od kilku dni męczę się z kodowaniem bazy po przenosinach i tak z ciekawości zajrzałem na wpninja. A tu niespodzianka, najnowszy post i mój problem rozwiązany, dzięki wielkie

  12. Szymon Skulimowski (24 listopada 2008, 15:04) #:

    Świetny feedback! Dzięki! :-)

    Jak widać jest całkiem sporo sposobów na rozwiązanie problemu z krzaczkami pojawiającymi się zamiast polskich liter.

  13. mpl (5 grudnia 2008, 9:27) #:

    jest jeszcze jeden problem z kodowaniem który występuje przy przenosinach bloga…
    co zrobić jeśli po imporcie bazy na nowy serwer wszystkie ogonki zamieniły się na „?”
    w takim przypadku funkcja „znajdź i zamień” raczej nie pomaga bo wszędzie jest taki sam znak zapytania……

  14. Szymon Skulimowski (5 grudnia 2008, 15:38) #:

    Nie jestem specjalistą ale czytałem, że taka baza jest już praktycznie do niczego.

  15. krzysiek (24 września 2009, 16:25) #:

    dzieki bardzo za porady – uratowales mi zycie! ( a przynajmniej jego 3 godziny bo mialem dokladnie ten sam problem przy przenoszeniu mej bazy

    dzieki jeszcze raz
    pozdro
    krzysiek
    ps pisze bez pl liter zebys nie mial problemow z mym komentarzem :)

  16. Sławomir Chojancki (23 lutego 2010, 17:45) #:

    dzieki za linki, w szczególności z komentarzy – przydały sie :)

Dodaj własny komentarz

Odnośniki z innych stron (2)

Lista innych stron, które w jakiś sposób odnoszą się do opublikowanej tutaj treści:

  1. Migracja bloga wielka przeprawa |

    [...] firma http://dhosting.pl. Polecam pomocny artykuł, dla tych których czeka również taki proces : http://wpninja.pl/konwertowanie-bazy-danych-na-utf-8/ Dodaj do: Post-Plugin Library missing Witaj. Bardzo mi miło, że Chcesz dodać komentarz do [...]

  2. Migracja bloga wielka przeprawa « Kamil Gruba blog

    [...] W dniu dzisiejszym ostatecznie zakończyłem przeprawę z migracją bloga na nowy serwer. Było to chyba jedno z najtrudniejszych zadań technicznych przed jakimi stanąłem odkąd prowadzę własny blog w oparciu i platformę WordPress. Generalnie sam proces przeniesienia bloga na nowy serwer nie wydaje się trudny wystarczy przeczytać jedną z wielu instrukcji i można się do tego zabierać. Mam już przecież dosyć duże doświadczenie z wordpressem i nigdy nie sprawiał mi większych trudności, a jeżeli jakieś małe się pojawiały potrafiłem błyskawicznie je rozwiązać. Niestety tym razem podczas procesu przenoszenia bloga pojawiło się klika trudności, z których nie mogłem rozwiązać głównie tej z kodowaniem bazy danych. Niestety pomimo wielu prób zarówno moich jak i bardziej kompetentnych w tej kwestii osób zakończyło się to niepowodzeniem. Baza była zakodowana w tak dziwny sposób, że nawet „manualna” zamiana w edytorze nastręczyła problemów nie do rozwiązania. Po trzech dniach samotnej walki byłem już gotowy przenieść się na platformę blogspot.com chociaż w zestawieniu z WordPressem przyprawiało mnie to o dreszcze. Znalazłem nawet narzędzie (niepopularne zważywszy na fakt, że migracja z reguły odbywa się w przeciwnym kierunku tzn. Blogger > WordPress. Plusem takiej migracji byłaby oszczędność na hostingu oraz brak zmartwień o jakieś problemy serwera czy limit transferu danych. Ostatecznie jednak poradziłem sobie w banalny sposób stawiając wordpress`a od nowa i importując plik xml. Oczywiście wiązało się to z ogromem problemów gdyż wszystkie ustawienia wtyczek, linki jednym słowem przepadły. Stwierdziłem jednak, że platforma blogowa jest dla ludzi a nie ludzie dla platformy i nie będę marnował więcej czasu na walkę z wiatrakami. Dosyć szybko uporałem się z 90% problemów wynikających z migracji na bazie pliku xml. Największy minus takiego posunięcia o jakim teraz myślę, to utrata wpisów we wtyczce All in One SEO Pack co sprawiło, że Google mnie indeksuje nie tak jak należy. Jednakże to też problem do rozwiązania. Mój nowy usługodawca to firma http://dhosting.pl. Polecam pomocny artykuł, dla tych których czeka również taki proces : http://wpninja.pl/konwertowanie-bazy-danych-na-utf-8/ [...]