转自:http://www.discuz.net/viewthread.php?tid=1254145 | 作者 :bskzq
现在假设正在使用的数据库编码为latin1,要转换成目标字符集GBK,MySQL版本5.0+,数据库名称dbmc,下面开始(转换之前请自行备份数据,这里不再重复):
1.下载MySQL源码包重新编译,加入编译参数
--with-charset=gbk --with-extra-charsets=all
使默认字符集为GBK,(WIN服务器忽略此步)
2.MySQL配置文件my.cnf里面加入default-character-set=latin1(WIN下面是my.ini),启动数据库
3.导出表的结构
mysqldump --compatible=mysql40 -d -uroot -p dbmc > table.sql
4.导出表的内容
mysqldump --compatible=mysql40 -t -uroot -p dbmc > data.sql
5.编辑MySQL配置文件,删除default-character-set=latin1这一行,重启数据库;如果是win服务器,请加入default-character-set=gbk这一行,重启数据库。
6.删掉原来的数据库重建,然后重新导入数据
mysql -uroot -p
drop databases dbmc;
create database dbmc;
quit
mysql -f dbmc < table.sql
mysql -f dbmc < data.sql
OK,完成转换,需要转换其他编码的步骤雷同。
实际操作中,使用MySQL5.0+的客户端mysqldump导出数据时,会添加下面几个语句
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
SET character_set_client = @saved_cs_client;
在少数情况下,这有可能会导致GBK用户发生乱码,这时需要修改源码,重新编译得到GBK版本来进行操作