日期:2014-05-17  浏览次数:20525 次

困扰我的编码问题(导致中文乱码),由解!!!
我的网站页面都是用gb2312编码(不能改),我可以改mysql数据库!
我把mysql数据库中数据从utf8_general_ci改成gb2312_chinese_ci是不是就能从根本解决问题?
utf8_general_ci与gb2312_chinese_ci有什么本质区别,比如在存储容量,读取速度等上?

------解决方案--------------------
看过传智播客的php视频,好像听韩老师讲过utf8 汉字是三个字节,而在gb2312,一个汉字是两个字节。
------解决方案--------------------
mysql连接时候的编码应该也需要设置
------解决方案--------------------
那就是说你的数据库是 utf8_general_ci 的啰
不需要修改!
只需在每次连接数据库后执行 set names gbk 即可

utf8_general_ci与gb2312_chinese_ci没有本质区别,但前者与后者占用的存储量比为3:2



------解决方案--------------------
你说的页面不允许改,包不包括php代码呢,如果你的php中加了一个:mysql_query("set names utf8");那就麻烦了。
------解决方案--------------------
是的,你页面需要什么编码就 set name 什么编码(只是utf-8要写作utf8)
当数据是发送给 ajax 的时候,再发送前执行
header('Content-type: text/html;charset=GBK');
就可以了
------解决方案--------------------
改了数据库设置,原有数据要重写一遍吧?

unicode 码位在0800-ffff范围内的字符utf-8是三个字节,常用的汉、日、朝、蒙、藏字符都在这个范围内

有少量不常用汉字、朝鲜字在010000开外,对应utf-8就是更多字节,但这些字符多为古体字,不常见,一般windows的字体font也不能显示,可以不怎么理会它们

GBK编码汉字和符号是双字节
------解决方案--------------------
要 gbk_chinese_ci 而不是 gb2312_chinese_ci
前者有两万多汉字,后者只有六千多汉字

gbk_chinese_ci 和 utf8_general_ci 的汉字数量是一样的
但后者要多占50%的存储空间