Мария становится всё страннее и страннее. За год метания между перконой-ораклом-марией пришёл к выводу , что Мария - конструктор, не более.
Засосать в себя все что делается другими, добавить своих красивых наработок и получить на выходе несовместимый со стоковым мускулем даже по командам DML.
А теперь по теме ТС:
Скрипт от
dimOn прекрасен своей каноничностью, если не принимать во внимание изменение типа текстовых данных при такой конвертации. Как отразится на базе БЖБ при работе и обновлениях то , что CHAR/VARCHAR/TEXT/BLOB стали вдруг MEDIUM/LONGTEXT - никому не ведомо.
Если у Вас есть возможность "стопорнуть" базу - то самым правильным способом при конвертации будет использовать одну интересную фичу mysqldump при запуске с привилегиями mysql-root. Вот так например можно с cp1251 перейти на utf8:
Код:
#!/bin/bash
mysql -u root -ppassword --skip-column-names -e "SELECT table_name FROM information_schema.tables WHERE table_schema = 'bgbilling';" > /tmp/bgb_tables.txt
while read line ; do
echo "SET autocommit=0;SET unique_checks=0;SET foreign_key_checks=0;" > "/tmp/$line"
mysqldump -uroot -ppasword \
--max_allowed_packet=100M \
--skip-opt \
--single-transaction \
--flush-logs \
--order-by-primary \
--create-options \
--quick \
--skip-set-charset \
--log-error=/tmp/$line.dump \
--skip-extended-insert \
--default-character-set=utf8 \
bgbilling $line >> /tmp/$line
echo "show warnings;SET autocommit=1;" >> "/tmp/$line"
done < /tmp/bgb_tables.txt
#
echo "DROP DATABASE bgbilling;" > /tmp/pre_bgb.sql
echo "CREATE DATABASE bgbilling DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;" >> /tmp/pre_bgb.sql
#
mysql -uroot -ppassword < /tmp/pre_bgb.sql
#
while read line1 ; do
sed -e 's/DEFAULT CHARSET=cp1251/DEFAULT CHARSET utf8 COLLATE utf8_unicode_ci/g' -i /tmp/$line1
mysql -uroot -ppassword -vvv --max_allowed_packet=100M --init-command="SET NAMES utf8" bgbilling < /tmp/$line1 2>&1 > /tmp/$line1.rest
done < /tmp/bgb_tables.txt
#
exit 0
Заодно и примари-индексы перестроите и таблицы дефрагментируете. А повырезав строчки из /tmp/bgb_tables.txt перед запуском обратного процесса - избавитесь от лишних таблиц-логов.