Tag: utf8

  • latin1 táblában tárolt utf8 tartalom

    Aki nem most hozat létre adatbázisát, hanem még MySQL4, esetleg 3-mas időkben, az könnyen szembe találhatja magát a címbeli problémával:

    latin1 táblák

    Sajnos, ha a tábla latin1 kódolású, s mi utf8 tartalmat mentünk bele, akkor az így fog kinézni:

    latin1 utf8

    Ez nehezen olvasható, s gondolom senki se szeretné látogatóit kitenni egy ehhez hasonló kódolású oldal olvasásának. Feladat egyszerű, ki kell nyerni a tartalmat utf8 kódolásban, majd a tábla kódolását latin1-ről utf8-ra kell változtatni, s visszatölteni bele a tartalmat.

    Hogyan?

    A legtisztább a helyzet, ha van parancssoros hozzáférésünk, ekkor kiadjuk a
    mysqldump -u NÉV -p --database `ADATBÁZISUNK_NEVE` --default-character-set=latin1 > ADATBAZISUNK_NEVE.sql

    Így egy utf8 kódolású fájlt kapunk, amit ezután vissza kell már csak tölteni a MySQL adatbázisba. Ahol esetleg latin1 szerepel benne, azt cseréljük le utf8-ra:

    sed 's/latin1/utf8/' db.sql > db_franko.sql

    Ha pedig abszolut biztosra akarunk menni a kódolással, akkor még ezt a parancsot is kiadhatjuk (nem feltétlen szükséges):

    iconv -f utf-8 -t utf-8 db_franko.sql -c -o db_uber_franko.sql

    Ezután vissza a levesbe:

    mysql -u NÉV -p < db_uber_franko.sql

    Ha nincs a szerverhez parancssori hozzáférésünk, akkor phpmyadmin segítségével mentsük el az adatbázist/táblát, majd szintén phpmyadmin segítségével localhoston (xampp, lampp, mamp, stb.) importáljuk be utf8 (!!!) kódolással a dumpot. Ezután localban már mehet a fenti parancssori bűvészmutatvány, s az eredmény pedig mehet fel a tárhelyünkre.

    A megoldás ennyire egyszerű, de ha erre nem jön rá az ember, nem talál valami jó forrást a neten a több ezer találat között, akkor úgy jár, mint mi anno lipileevel, hogy a nem túl szép kódolású szöveget karakterenként próbáltuk átkódolni sikertelenül. A titok pedig ennyi. Hihetetlen.

    Először Derek Sivers ultrakacifántos írása volt a mankó, de valamelyik sokadik lépés után feladtam. A fenti módszer egyszerűbb volt. Az ötlet egyébként innen származik. Izgalmas volt még Rob Marscher php-s megoldása, amivel még próbálkoztam, de valamiért nem jártam sikerrel.

    A google kb 9000 találatot jelenít meg a végül sikeres utf8 stored in latin1 table keresőkifejezésre. Azt hiszem ezekszerint nem egyedi probléma, de könnyen orvosolható. 🙂