麻辣堂|资源主站|开发论坛|在线手册
首页 Apache Linux Java MySQL 注册帮助 
PHP项目开发组是PHP开发资源网于2007组年建成立的项目开发团队,目前核心开发成员有27人, 项目协作成员8名.下设7个开发组,主要承接大/中型网站项目开发任务。

    由于开发任务较多,人员比较紧张,现面向社会招聘全职或者兼职开发人员,不管你是在校大学生,还是全职开发人员,以及SOHO都可以联系本站,我们可以长期合作,并为您带来丰厚的报酬。
  您现在的位置:PHP开发资源网 > 麻辣堂 > 详细资料
待解决
Mysql字符编码问题
悬赏分:20 - 2007年08月18日

在做PHP的数据库备份时,搞的中文乱码问题郁闷,总结了下下~~
MYSQL4.1之后的版本在字符编码方面,作了很大改动:
character_client
character_connection
character_database
character_results
character_server
(默认这些全是latin1)
导致了对数据进行导入导出时出现了乱码问题,在使用MYSQL4.1之前版本时,用PHPMYADMIN或MYSQLFRONT进行MYSQL管理时,数据库使用默认latin1字符集,升级到4.1之后,在PHPMYADMIN和MYSQL里均是乱码,但原来的应用程序是正常的,而如果你直接在PHPMYADMIN和MYSQLFRONT里进行中文相关修改的话,绝对会在你的原有应用里出现??,而且从一个数据库导出导入另一个数据库时,尽管是相同的latin1字符集,但绝对不象你想象的结果那样,通过研究MYSQL的官方说明,最后的结论是:
上面的client是表示提交的SQL编码,connection是传给MYSQL服务器时的编码,server是服务器收到的SQL,database是服务器最后写入数据库时用的编码,results是服务器响应客户端取值发送出的数据的编码;
所以,由于PM/MF(上面两个程序简称)现在的全是用utf8编码方式处理数据,我们在自己的普通ASCII编码系统里发送接收显示的都是latin1编码字符串,所以在PM/MF里的话,我们输入latin1的中文,但程序认为是UTF8,先将它解码成ASCII(这里就错了,我们已经是ASCII,再解码...就变成不认识的??字符了),传至数据库直到写入(由于默认全是latin1,所以不再进行任何编码转换),好好的ASCII变成??入库了,而取出的时候,在客户程序里,肯定是??了,而在我们自己的系统里,由于是ASCII编码的,所以没这个问题,所以,如果系统的默认latin1编码没变,而你的原有数据库也是latin1编码的话,升级4.1后你的原有系统不会有任何影响,但是,如果你要备份导入导出这个数据库的话要注意了,推荐还是用PHPMYADMIN吧,毕竟大多数时候MYSQL是用在PHP中,而PHPMYADMIN毕竟是PHP写的,MF是用C写的,导出的时候就可能会有点问题了...要导入时,一定不能选择文件导入方式(当然,还是指全用latin1编码方式时),因为PM读文件时还是用UTF编码了一遍,导出的时候已经把中文变成一堆看不懂的ASCII了,它再把ASCII转成UTF,乱到不知哪去了,一定用PM或MF的SQL批量执行,因为是直接把SQL送到数据库的不做编码,所以还是原始的ASCII入库了,就没问题了~~~
当然,这毕竟是老数据库的一种解决技巧,如果是新建数据库的话,最好还是直接使用utf8编码吧,安装数据库的时候也全部选择utf8吧,这样,就不用怕转来转去的乱码了~~~

提问者:meineson   08-18 08:08
答复
路过。。。顺便帮顶:)
回答者:玉米づ冰冻可乐 - 瓦岗村民 8-22 09:10
我也来回答:
不管你有没有帮助我们,瓦岗寨8万村民将感谢你。。。。。

为防止灌水,您需要计算一道数学题: 答案:
84 + 74 = ? 请将计算结果填在上面

 
[]
©2007 PhpRes.COM