OS: FreeBSD 5.5
NetUP: 5.1.10-017 -> 5.2.1-004
MySQL: 5.0.24
Я столкнулся с проблемой перекодировки при переходе с версии 5.1.10-017 на версию 5.2.1-004.
То есть, русский текст из базы стал отображаться иероглифами.
По всей видимости, новая версия программы стала обращать внимание на значение DEFAULT CHARSET таблиц, которое, в моем случае, имеет значение latin1.
Данные в самих .MYD файлах базы записаны в кодировке utf8 (это я проверил, прокатив один из них на экран, где предварительно установил соответствующие параметры консоли).
Для исправления этой беды было сделано следующее:
1) Указываю дефолтную кодировку в /etc/my.cnf (vi /etc/my.cnf):
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
2) Перезапускаю mysql и гашу netup:
/usr/local/etc/rc.d/utm5_core.sh stop
/usr/local/etc/rc.d/mysql-server.sh stop
/usr/local/etc/rc.d/mysql-server.sh start
3) Создаю новую базу с DEFAULT CHARSET выставленным в utf8:
CREATE DATABASE `XXX` DEFAULT CHARACTER SET utf8;
4) Переливаю старую базу в новую, попутно меняя значения DEFAULT CHARSET для таблиц:
mysqldump --default-character-set=latin1 --skip-set-charset UTM5 | sed "s/CHARSET=latin1/CHARSET=utf8/g" | mysql --default-character-set=utf8 XXX
5) Останавливаю mysql:
/usr/local/etc/rc.d/mysql-server.sh stop
6) Копирую каталог с новой базой на место старой:
mv {db_home}/UTM5 {backup_place}/
mv {db_home}/XXX {db_home}/UTM5
7) Запускаем, работает!
/usr/local/etc/rc.d/mysql-server.sh start
/usr/local/etc/rc.d/utm5_core.sh start
PS:
Этого текста могло и не быть, если бы в файле UTM5_MYSQL.sql из которого создавалась база, разработчики явно прописали бы кодировки.
Перекодировка базы или upgrade c кракозябрами
странно. А как же тогда 521-004 у меня работает с default charset=latin1 на базе и с базой в utf8 (так просто исторически сложилось).По всей видимости, новая версия программы стала обращать внимание на значение DEFAULT CHARSET таблиц, которое, в моем случае, имеет значение latin1.
У меня мускуль собран с utf8 по умолчанию.
Ну, все развивается, надеюсь, разработчики учтут мое замечание и внесут изменения в этот скрипт для новых версий, чтобы народ не мучался. Тем более, что этот скрипт создается автоматически утилитой mysqldump, делов то.
А для тех кто пойдет моим путем, то есть, чтобы в базе все стало правильно и везде был сплошной UTF8, есть еще совет.
После перекодировки все стало отображаться красиво в нетапе, но скрипты написанные мной лично стали писать кракозябрами. Поэтому в каждый скрипт пришлось добавить:
$dbh->do("SET character_set_client = utf8");
$dbh->do("SET character_set_connection = utf8");
$dbh->do("SET character_set_results = utf8");
Вот теперь полный порядок!
А для тех кто пойдет моим путем, то есть, чтобы в базе все стало правильно и везде был сплошной UTF8, есть еще совет.
После перекодировки все стало отображаться красиво в нетапе, но скрипты написанные мной лично стали писать кракозябрами. Поэтому в каждый скрипт пришлось добавить:
$dbh->do("SET character_set_client = utf8");
$dbh->do("SET character_set_connection = utf8");
$dbh->do("SET character_set_results = utf8");
Вот теперь полный порядок!