czwartek, 24 listopada 2011

Jak naprawić kodowanie w bazie danych, Linux

Jeżeli przenosiliście serwisy internetowe pomiędzy różnymi serwerami na pewno napotkaliście problemy związane z nieprawidłowym kodowaniem w bazach danych.

Jedną z metod rozwiązania tego problemu jest wykorzystanie programu iconv:
http://linux.die.net/man/1/iconv

Niestety nie zawsze działa to poprawnie.

Miałem jakiś czas temu sytuację w której klient miał znaki hiszpańskie w tekście (nie wiedziałem nawet jaką kombinację klawiszy należy użyć żeby wstawić n z kreską u góry), a kodowanie trzeba było poprawić.

Pierwszy wybór padł na sed, niestety sed'owi chyba nie odpowiadały znaki hiszpański i postanowił ich po prostu nie konwertować.

Z iconovem nie chciałem nawet próbować, ponieważ nie mam pojęcia z jakiego kodowania na jakie miałbym to zmieniać.


Postanowiłem zrobić więc pełen zrzut bazy danych do pliku (baza MySQL).
Kolejnym krokiem było wykorzystanie opcji zamieniania wybranych fragmentów tekstu z poziomu edytora vim np:
:%s/obecne_krzaki/krzaki_docelowe/g

Po wprowadzeniu tego polecenia wszystkie "obecne_krzaki" zmieniły się w "krzaki_docelowe".

Pozostało już tylko zaimportować bazę danych i odpisać na zgłoszenie ... i mieć nadzieję, że klient nie zadzwoni/odpisze.

Na szczęście nie było kolejnego kontaktu ze strony klienta, więc założyliśmy że wszystko przebiegło pomyślnie.

Gdy kiedyś zawiodą Was wszystkie dostępne metody naprawy kodowania w bazie danych, jako ostatnią deskę ratunku można właśnie stosować polecenie %s/.../.../g w vim'ie.

Jak sprawdzić kodowanie plików w Linux'ie

Nie wiem czy zdarzyło się mieć problemy z wyświetlaniem stron lub plików tekstowych, czyli pojawianie tzw. "krzaków".

Pierwszą czynnością która w takiej sytuacji należy sprawdzić jest to z jakim kodowaniem wybrany plik został stworzony.

Jeżeli korzystamy z Linux'a wy starczy jedno polecenie:
file -i index.html

index.html: text/html; charset=iso-8859-1