LINUX.ORG.RU

mysql: howto latin1.table.host1 move to utf8.table.host2


0

0

Каким образом можно перенести базу данный mysql, хранящуюся в кодировка latin1 на другой хост, попутно сконвертив базу в utf8?

На первом хосте (freebsd):
mysql> show variables like "char%";
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | latin1                           |
| character_set_connection | latin1                           |
| character_set_database   | latin1                           |
| character_set_results    | latin1                           |
| character_set_server     | latin1                           |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/share/mysql/charsets/ |
+--------------------------+----------------------------------+
7 rows in set (0.01 sec)


на втором хосте (linux):

mysql> show variables like "char%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
7 rows in set (0.00 sec)


mysqldump на host1 и потом mysql <dump.sql не приводит ни к чему хорошему - русский текст в таблице корежится до неузнаваемости.

Пробовал предварительно сделать
alter table $table CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin
для всех таблиц базы на первом хосте

потом dump и restore на втором - все тоже самое, русские имена корежатся до крякозябр :(

Поиск в гугле внятностей не принес, в доке на mysql ничего подобного не разбирается (в рамках переноса на другой хост).

Кто нибудь занимался? Как решить проблему?


Опытным путем выяснилось, что, если в первом или втором описываемых вариантах, перед select() на новом хосте дать команду 
 set  character_set_results="latin1";
то русский язык появляется...

А как бы сделать, чтобы latin1 вообще не упоминался? 


А если просто текстовый дамп перегнать с помошью iconv например того же ?

SI ★★☆☆
()
Ответ на: комментарий от SI

И это тоже прововал:

mysqldump базы в latin1 потом iconv -f iso-8859-1 -t utf-8 latin1.sql > utf8.sql

этот dump на другой машине подсасывал - опять закорючки одни (хотя какая то конвертация явно произведена, потому как utf8.sql увеличился в размере раза в два).

mysql на обоих хостах одинаковый - 4.1.21

eightn
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.