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

如上一篇文章所说,本文针对的典型情况就是:使用MySQL建立数据库时采用了默认编码latin1, 用latin1编码的数据库存储了中文信息,导致在新版本phpMyAdmin中浏览数据库出现乱码。
 
在执行下面命令之前,确保你使用的是MySQL4.1或更新的版本,因为之前的MySQL版本没有多编码支持。
 
具体步骤如下,命令参数应根据实际情况修改:
  1. 备份需要修改的数据库,以防不测。
  2. 在命令行下执行如下命令:
    mysqldump -uusername -pyourpasswd --default-character-set=latin1 --add-drop-database --databases dbname1 dbname2 ... >db.sql
    其中dbname1, dbname2, 等等是所要导出的数据库的名字列表
    username是对上述数据库至少有读取权限的用户名,比如root
    yourpasswd是username用户的密码
  3. 查看上一步产生的db.sql, 确保其中没有乱码。如果有乱码,可能是以上命令参数与数据库编码不一致,应回头检查修改,不要继续下一步。
  4. 确保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,也一并删除。
    以上两种修改使用查找替换即可。
  5. 在命令行下执行如下命令:
    mysql -uroot -prootpasswd <db.sql
  6. 在新版本的phpMyAdmin中查看修改编码后的数据库,验证是否正常导入。
  7. Over.

注意修改数据库编码为非默认编码之后,为了防止网页中出现乱码,程序中需要在连接MySQL成功之后首先执行一句:
SET NAMES charset;
其中charset是网页采用的编码,一般是gb2312, gbk或者utf8
执行SET NAMES的作用是把客户端编码告诉MySQL服务器,让服务器知道如何转换编码以防止出现乱码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值