转换mysql数据库到正常的字符集

自从mysql 4.1以后,对字符集的支持有了大幅度的加强。但是从老版本迁移过来的数据库一般都是使用错误的latin1字符集。不过在这样的情况下使用php客户端仍然可以正常的操作汉字,但是在排序和全文搜索方面存在很多问题。如果使用java或者.net访问问题会更多。
决心把现有数据库转换到正确的字符集。现在没有很好的工具可以直接支持这个操作,需要自己做导出和导入。
使用官方的mysqldump是无法正常导出的,使用MySQL Administrator也不行,都会是乱码。这也反映了数据库内部没有使用正常的字符集。
可以使用EMS Mysql manager里的extract database功能来导出,注意不要选commit不然导入时有些问题。然后对导出的文件做一些处理。
首先使用ue查找替换所有建表时使用的latin字符集定义为gb2312。然后替换建库的字符集设置。并在文件前部加上SET NAMES GB2312;(不过这句也许不是必须的,但是这样可以更确保使用了gb2312来操作数据库)。最好改掉数据库的名字,导入到一个临时库。然后把文件字符集改为utf8,这一步必须要做。
最后使用MySQL Administrator来restore数据库,如果中间提示mysql错误,在my.ini里添加set-variable=max_allowed_packet=18M来防止数据量过大时超过packet的最大限制。有时导入时会提示语法错,注意检查一下相应的sql语句。
使用ems导入总会出错,原因为止。
导此数据库转换成功。
如果mysql服务器的所有数据库都作了转换,可以在my.ini里加上default-character-set=gb2312。如果只是转换了部分库,需要对使用这些库的php程序作修改。在连接好数据库以后,执行SET NAMES GB2312;。对于.net程序,在连接字符串里加上charset=gb2312。
注意做备份。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值