Всеки може да отстъпи, само смелите продължават.

Смяна на колация на mysql база данни

Автор bliznaka

Преди около година ми се наложи да сменя колацията на база данни. Използваше се MySQL сървър, а базата данни беше малко над 200 MB с над 80 таблици. Първото нещо което ми дойде на ум беше да направя скрипт, с който да извлека данните от всяка таблица и да ги вкарам в таблици с подходщшата колация в новата база данни. Дотук добре, но при условие че нямах толкова голяма база данни, а и не толкова много таблици… мързела ми се обади и реших да направя един research в google. Не след дълго намерих нещото, което определено улесни живота ми. За да можете да направите следващите стъпки трябва да имате ssh достъп до сървъра или да направите пълен backup на базата си данни посредством phpmyadmin. Ето и стъпките:

1. Логвате се през ssh използвайки потребителското си име и парола

2. Правите пълен експорт на данните си, като ползвате mysqldump инструмента

mysqldump -uroot -p –default-character-set=latin1 my_database > my_database.sql
- заменете -uroot с -uпотребителско_име;
- заменете –default-character-set=latin1 с –default-character-set=сегашната_колация_на_базата_ви;
- заменете my_database с името на вашата база данни;
- заменете my_database.sql с името на желания изходен файл, в който ще се експортнат данните ви;
(т.1 и т.2 може да ги пропуснете, ако нямате ssh достъп и сте направили експорт през phpmyadmin-а)

3. Конвертирайте експортнатите данни в нов файл с желаната колация

iconv -c -f cp1251 -t utf8 my_database.sql > my_new_database.sql
- за целта се ползва iconv;
- входната колация на данните е cp1251, тъй като базата данни има кирилски символи;
- избраната от мен изходна колация е utf8;

4. Заменяне на всички стари колации с новите

perl -pi -e “s/SET NAMES latin1/SET NAMES utf8/” my_new_database.sql
perl -pi -e “s/latin1/utf8/g” my_new_database.sql
- с първия ред заменяме всички SET NAMES latin1 с SET NAMES utf8 в новия файл;
- с втория ред заменяме всяко срещнато latin1 с utf8;

5. Вече сме готови да вкараме данните в новата база данни

mysql -uroot -p my_new_database < my_new_database.sql
- тук my_new_database е името на новата ни база данни;
- my_new_database.sql е името на нашия нов файл с данни, с правилна колация;

За точки 3, 4 и 5 ви е необходима линукс базирана операционна система, ако нямате такава просто отворете файла с експортнатите данни и заместете старите колации с новите, запаметете файла и след това импортнете файла през phpmyadmin-а на хост-а ви. Този вариант за съжаление е доста по-бавен, но пак ще постигнете крайния резултат.