下载中心 | 网站地图 | 站内搜索 | 加入收藏

安恒公司 / 技术文章 / 安恒公司网管员手记 / mysql 4.1+ 汉字乱码问题研究 --安恒网管员手记

2005-09-15 刘世伟  阅:    下页: 实战 »
mysql 4.1+ 汉字乱码问题研究 --安恒网管员手记
mysql4.1下,一些数据库里面的中文会出现??乱码现象.因为,4.1增加了对utf8的支持,这是件好事.但是,问题是大部分的程序,都是使用的gb2312/gbk这样的编码格式,如果把它们都改成utf8格式,要转换成utf8需要解决的事情比较多.编辑器,浏览器,mysql-server,mysql-client,php,php-mysql,cvs代码管理,数据库备份,还有合适的gb2312到utf8的转换工具.诸多的环节需要考虑.
数据库的格式转换,文件程序的格式转换,和mysql-server的设置情况记录一下.
当然真正的转换,现在还没有做,现在只是做点规划.

关于??乱码,是系统相关的各个环节之间进行代码转换出现的问题,比如在shell下用mysql这个程序对数据库进行恢复,mysql会错误的把代码进行转换,导致乱码出现,

在转换之前,我们一定要清楚,文件是什么格式,数据库内部是什么格式,都要统一到utf8下来,不对的要进行格式转换.

1.数据库的转换.
  以前数据库里面的字符,应该都是gb2312格式,这时,需要把所有的数据库文件导出成sql文本,然后对文本进行utf-8的格式转换.这里要注意的是一些2进值的字段内容会出问题.幸好,在我的项目中,2进值内容都进行了base64编码,如果数据库中存在2进值的内容,就要对它们进行单独的处理了.

  用mysqldump把数据从mysql4.0中导出,此时得到的sql文件应该是gb2312的,然后用iconv这个程序把sql文件改为utf8

导出一个mysql4.0的库(服务器:192.168.2.2 库名:dbname):
mysqldump -h 192.168.2.2 --add-drop-table -c   --set-charset=latin1 --allow-keywords --force -p  -u root dbname >1.sql
 内容转换utf8
iconv -c -f gb2312 -t utf8 1.sql -o 2.sql

在导入到4.1之前,先把mysql-server和mysql-client设置到utf8模式.

修改/etc/mysq1/my.cnf,在[mysqld]和[mysql]各增加1行:
[mysqld]
character_set_server = utf8
[mysql]
default-character-set =utf8
保证让服务器端和客户端都默认工作在utf8模式下,重启mysql-server后就可以导入了.
mysql -u root -h localhost test <2.sql
到这里,一个数据库就转换完成了.已经完全工作在utf8模式下了.

php的程序的修改.也可以用iconv程序.进行.
首先从cvs导出一个干净的代码拷贝,比如在net目录下,
cvs -d :pserver:xxx.xxx.xx.xx net co
删除一些不需要转换的文件
然后执行转换
find . -name "*.php" -type f -exec mv {} {}.old \; -exec iconv --verbose -f gb2312 -t utf8  {}.old  -o  {} \;  -exec  rm  {}.old   \;
至此,php代码就批量的转换到utf8模式.还有就是只要修改html的head的语言声明,从gb2312改成utf8,浏览器就会自动使用utf8的模式显示这个页面.  content="text/html; charset=utf8"

最后,就是把编辑器改成utf8模式了.这个就比较简单了.

好了,我们的web应用已经进入utf8模式了.哈哈.

下页: 实战 »   

相关文章
快速得到mysql的历史数据状态 - 09-01-02 - 阅读: 108555
ezmlm邮件列表使用mysql方式管理帐号 - 08-11-20 - 阅读: 138856
mysql的relay-bin - 07-10-16 - 阅读: 142372
mysql优化[转贴] - 07-10-02 - 阅读: 138052
mysql数据库的2次灾难恢复实战 - 07-04-14 - 阅读: 175812
利用内存磁盘加速mysql --安恒网管员手记 - 06-06-26 - 阅读: 241632
mysql 双机热备实战 --安恒网管员手记 - 05-04-20 - 阅读: 201645
mysql的备份,备份,备份 --安恒网管员手记 - 05-01-12 - 阅读: 167289
安恒网管员手记:mysql的自动备份 - 03-11-02 - 阅读: 167177
安恒网管员手记: mysql密码忘记的修改 - 03-05-05 - 阅读: 200319
mysql双机热备份 - 03-02-12 - 阅读: 148290

Email给朋友 打印本文
版权所有·安恒公司 Copyright © 2004   gentoo.anheng.com.cn   All Rights Reserved    
北京市海淀区首体南路9号 主语国际商务中心4号楼8层 (邮编100048) 电话:010-88018877