вопрос набора символов mysqldump - PullRequest
0 голосов
/ 05 марта 2011

У меня есть база данных, в которой хранящиеся данные кодируются в ГБК. Теперь я хочу сделать полный дамп этого файла и создать файл дампа в utf8. Таким образом, я могу конвертировать всю базу данных из GBK в utf8. Утилита mysqldump кажется правильным способом, и я только что заглянул в документацию mysqldump http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html#option_mysqldump_set-charset и, похоже, использует набор символов utf8. Итак, мой вопрос, могу ли я просто пойти с

mysqldump mydatabase > dump.sql

будет ли это работать для меня, mysqldump автоматически конвертирует мою базу данных GBK в utf8 для меня? И так как все таблицы, для которых изначально был установлен набор символов bgk, если я хочу импортировать файл дампа обратно в другую базу данных utf8, будет ли это работать?

1 Ответ

0 голосов
/ 13 декабря 2011

Я хочу импортировать файл дампа обратно в другую базу данных utf8, это тоже будет работать?

В mysql charset назначаются на многих уровнях (connection, table, field, ecc).
Предполагая, что все эти уровни в старой базе данных имеют кодировку GBK, а все эти уровни в новой базе данных - кодировку utf8, вам просто нужно заменить объявление кодировки для каждого уровня.

Представьте, что это часть файла дампа dump.sql

CREATE TABLE IF NOT EXISTS `mytable` (
  `id` int(11) NOT NULL auto_increment,
  `myname` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=gbk AUTO_INCREMENT=1065 ;

, что вам нужно, чтобы преобразовать его в

CREATE TABLE IF NOT EXISTS `mytable` (
  `id` int(11) NOT NULL auto_increment,
  `myname` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1065 ;

, с которым вы можете сделать это sed

sed -i 's/gbk/utf8/g' dump.sql

теперь файл готов для правильного импорта в базу данных utf8

...