MySQL 表转换字符集:gbk --> utf8
有表 tb_nickname 结构如下: CREATE TABLE `tb_nickname` ( `P_NickName` varchar(22) NOT NULL DEFAULT '', PRIMARY KEY (`P_NickName`) ) ENGINE=MyISAM DEFAULT CHARSET=gbk; 表中已有上万条记录,包含大量中文名称。 现在我们要把所有记录的字符集编码由 gbk 转换为 utf8 。 首先我们在新数据库 new_nickdb 中创建新表: CREATE TABLE `tb_nickname` ( `P_NickName` varchar(22) NOT NULL DEFAULT '', PRIMARY KEY (`P_NickName`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 之后我们导出旧表中的数据,为了保证数据正确导出,应当使用 --default-character-set 指定连接时的字符集为 gbk ,否则连接时会按照数据库默认的连接字符集进行转码,导致导出的数据出现大量的乱码。 mysqldump -uUser -pPass --no-create-info --default-character-set=gbk nickdb tb_nickname > /tmp/tb_nickname.sql 我们是否需要用 vi 打开 tb_nickname.sql ,并把其中的 SET NAMES gbk 手动改为 SET NAMES utf8 呢?答案是否定的,而且千万不要这么做! 起先我是按《深入浅出:MySQL 数据库开发、优化和管理维护》中的步骤来做的,上面说要进行修改,我不知道是否是因为他们的 MySQL 版本比较低——5.0 版本——我的是 5.1 ,这样修改之后是不会通过的。 最后将数据导入新库新表: mysql --default-character-set=utf8 new_nickdb < tb_nickname.sql