mysql 4.1 汉字乱码问题研究 --安恒网管员手记

mysql 4.1 汉字乱码问题研究 --安恒网管员手记 - 应用软件 - 电脑教程网

mysql 4.1 汉字乱码问题研究 --安恒网管员手记

日期:2006-11-20   荐:
·图形化管理MySQL更轻松·mysql 时间函数用法 集合·MySQL常见问题解答及技巧·Mysql学习点滴·MySQL 5.0 新特性教程 存储过程:第三讲·远程连接mysql资料·在Linux 环境下安装 Mysql·MySQL 常用命令·如何安装mysql 5.0·Mysql使用基础知识   在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 内容转换utf8iconv -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模式了.哈哈.

标签: