Back to Forum Re New

[PMA] 用PMA将Latin1编码的中文数据库 转换为utf8编码 的中文数据库

用phpmyadmin将Latin1编码的中文数据库 转换为utf8编码 的中文数据库


参考帖子  http://phpbb-tw.net/phpbb/viewtopic.php?t=40321

本帖写于 2014-7-12 01:04

这个是个字符编码设置的问题,我在网上搜索了好久,还去淘宝咨询了技术,从前晚到今天凌晨,好不容易把问题解决了。
要达到的效果是: phpmyadmin 里显示中文不乱码; phpmyadmin 导出的sql里显示中文不乱码;网站前台显示中文没乱码;网站后台显示中文没乱码。
其实关键就是将latin1 编码的MySQL数据库导出为能显示中文的sql文件,再将该文件转换为utf8编码的sql,即下面的第2步,这个过程必须在本地空间完成。

下面按步骤来说:
1、确保此时网站的网站前台后台都没有中文乱码。在 phpmyadmin 进入网站的latin1编码的数据库,将其导出为sql文件,然后导入到本地的latin1编码的数据库。检查本地的网站前台后台是否显示中文没乱码。没乱码继续下一步。

2、进cmd界面,运行mysqldump命令

E:\All\Dropbox\All\Web\MySQL5\bin mysqldump -uroot -p --default_character-set=latin1 --skip-set-charset db > E:\Downloads\db.sql
注意root和空密码是本地mysql的管理员帐号密码,--default_character-set=latin1是因为latin1为默认存储编码, db是数据库名,db.sql是要导出的sql文件,可以任意起名的。输入mysql用户密码后会导出 db.sql 文件,检查此时该db.sql文件是否显示中文没乱码。

使用UltraEdit替换该sql文件中的所有 DEFAULT CHARSET=latin1  为 DEFAULT CHARSET=utf8,该语句来指定表的存储编码,将该db.sql转存为UTF-8编码且无bom的文件。没乱码继续下一步。

3、打开原来的网站的源码包里的dbal目录里的mysql.php文件,搜索function query($query),在该代码下面的 { 行的下面插入一行代码     @mysql_query("set names utf8");
然后把本地里的网站目录删除,pma里的对应数据库删除,重建该数据库并设置数据库编码为utf8_general_ci。然后把修改过的源码包复制到本地,解压后建立新的网站。检查本地的网站前台后台以及pma是否显示中文没乱码。没乱码继续下一步。

4、将第2步得到的db.sql导入到本地的新的网站的数据库里,检查网站前台后台以及pma和sql是否显示中文没乱码。如果四个都木有乱码,那么继续下一步。

5、把网站的ftp里的eq网站目录删除,pma里的对应数据库删除,重建该数据库并设置编码为utf8_general_ci。然后把修改过的源码包上传到网站ftp,解压后建立新的eq网站。检查网站的网站前台后台以及pma是否显示中文没乱码。没乱码继续下一步。

6、 将第2步得到的db.sql导入到网站的新的eq网站数据库里,检查网站前台后台以及pma和sql是否显示中文没乱码。如果四个都木有乱码,那么大功告成,亲个嘴儿。

福利:对  big5编码、gb2312编码、gbk编码 的中文数据库的转换编码,同理操作
EQ中文世纪地图集地址:
www.ceqmap.com
Back to Forum