如何通过导出和导入修改MySQL数据库编码

使用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服务器,让服务器知道如何转换编码以防止出现乱码。

MySQL数据库中如果在建立数据库的时候没有选择字符编码集gb2312或者utf或者gbk,就有可能会出现一些乱码的现象。本文主要介绍一下设置字符编码集得方法,设置字符编码集得方法如下:

解决方法:

开始-->运行-->cmd -->进入dos命令窗体:(如果命令无法执行,请将mysql的安装路径放到系统变量path的最前面)

mysql导出命令:

    mysqldump -hlocalhost -P3306 -uroot  -p123456 --default-character-set=gb2312 mysql>F:/pushingdb.sql

mysql导入命令:

    mysql  -uroot -p123456 --default-character-set=gb2312 test<F:/pushingdb.sql

注:root表示数据库用户名,123456表示数据库密码,mysql表示数据库名称,F:/pushingdb.sql表示导出到本地的位置;

这样,经过上面的设置,就可以避免MySQL数据库中一些乱码现象的发生了。

有话要说