数据库的格式转换,文件程序的格式转换,和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模式了.哈哈.