publikacja: 23 listopada 2008, autor: , komentarzy 17 https://wpninja.pl/artykuly/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

  1. czara 9 lat temu:

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

    odpowiedz
  2. yatsen 9 lat temu:

    żebym to miał dwa lata wstecz…. eh

    odpowiedz
  3. Lanooz 9 lat temu:

    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ę.

    odpowiedz
  4. Lanooz 9 lat temu:

    Tylko czy wtyczka działa dla wp 2.6?

    odpowiedz
  5. Szymon Skulimowski 9 lat temu:

    Tylko czy wtyczka działa dla wp 2.6?

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

    odpowiedz
  6. Tomek 9 lat temu:

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

    odpowiedz
  7. dejavu24 9 lat temu:

    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ć

    odpowiedz
  8. palmiak 9 lat temu:

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

    odpowiedz
  9. Malin 9 lat temu:

    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ć.

    odpowiedz
  10. Tomek 9 lat temu:

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

    odpowiedz
  11. tom 9 lat temu:

    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

    odpowiedz
  12. Szymon Skulimowski 9 lat temu:

    Świetny feedback! Dzięki! :-)

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

    odpowiedz
  13. mpl 9 lat temu:

    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……

    odpowiedz
  14. Szymon Skulimowski 9 lat temu:

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

    odpowiedz
  15. krzysiek 8 lat temu:

    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 :)

    odpowiedz
  16. Sławomir Chojancki 8 lat temu:

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

    odpowiedz

Dodaj własny komentarz

Odnośniki z innych stron

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

  1. 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. […]