您的位置:首页 > 运维架构 > Linux

通过导出和导入修改MySQL数据库编码(linux与win平台转换)

2009-03-09 21:17 218 查看
如上一篇文章所说,本文针对的典型情况就是:使用MySQL建立数据库时采用了默认编码latin1, 用latin1编码的数据库存储了中文信息,导致在新版本phpMyAdmin中浏览数据库出现乱码。

在执行下面命令之前,确保你使用的是MySQL4.1或更新的版本,因为之前的MySQL版本没有多编码支持。

具体步骤如下,命令参数应根据实际情况修改:

备份需要修改的数据库,以防不测。

在命令行下执行如下命令:
mysqldump -uusername -pyourpasswd --default-character-set=latin1 --add-drop-database --databases dbname1 dbname2 ... >db.sql
其中dbname1, dbname2, 等等是所要导出的数据库的名字列表
username是对上述数据库至少有读取权限的用户名,比如root
yourpasswd是username用户的密码

查看上一步产生的db.sql, 确保其中没有乱码。如果有乱码,可能是以上命令参数与数据库编码不一致,应回头检查修改,不要继续下一步。

确保db.sql中没有乱码,按如下方法修改db.sql:
找到SET NAMES latin1,修改为SET NAMES xxx(此处xxx为db.sql文件的编码,一般为gbk,应根据实际情况修改);
将各个CREATE DATABASE语句中DEFAULT CHARACTER SET xxx中的xxx修改为该数据库所需要修改为的目标编码(gbk或者utf8);
将各个CREATE TABLE语句中的DEFAULT CHARSET=xxx删除,如果有COLLATE xxx,也一并删除。
以上两种修改使用查找替换即可。

在命令行下执行如下命令:
mysql -uroot -prootpasswd <db.sql

在新版本的phpMyAdmin中查看修改编码后的数据库,验证是否正常导入。

Over.

注意修改数据库编码为非默认编码之后,为了防止网页中出现乱码,程序中需要在连接MySQL成功之后首先执行一句:
SET NAMES charset;
其中charset是网页采用的编码,一般是gb2312, gbk或者utf8
执行SET NAMES的作用是把客户端编码告诉MySQL服务器,让服务器知道如何转换编码以防止出现乱码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: