вторник, 16 март 2010 г.

Проблеми с кирилицата.

Това е един често срещан проблем. Натъквал съм се на него преди около две години. Възниква, както винаги от малоумието на задклавиатурното устройство, известно още като спретвач. ;) Описание на проблема: "Информацията от mysql-ла на сайта си излиза перфектно на кирилица. Ако обаче се опитате през phpMyAdmin да browse-нете данните или да ги експортнете шльокавицата е пълна." Сега решението. Решението, което съм ползвал аз изисква наличието на *NIX, шел достъп до сървъра и известна доза търпение. Проблема се състой в това, че по-начало default-ния енкодинг на
базата е бил latin1. При създаването и не е било обърнато внимание на
това и просто е била продължена работата. Сайта е работел нормално
защото mysql-a си е конвертирал енкодингите вътрешно. Това, обаче
води до невъзможност за нормален бакъп, защото за разлика от
клиентската страна mysql-dump-a и каквито и да е приложения за
бакъп не могат да се оправят "вътрешно". Решението на проблема е
простичко. Първо се "dump"-ва в latin1. Налага се защото по дефолт
ще ти бъде дъмпнато в utf8.
mysqldump --default-character-set=latin1 -u databasename -p -t databasename > databasename.sql
След това с помоща на iconv се конвертира от latin1 в utf8.
iconv -c -f cp1251 -t utf8 databasename.sql > databasename2.sql
В последствие се налагат малко обработки с Perl. Разбира се
може да се направят и с текстов редактор:
perl -pi -e 's/SET NAMES latin1/SET NAMES utf8/g' databasename2.sql
и
perl -pi -e 's/latin1/cp1251/g' databasename2.sql
Това е. След това можете просто да импортнете резултантния дъмп.