wamp的初始编码设置及乱码原因

来源:互联网 发布:淘宝网店招的图片尺寸 编辑:程序博客网 时间:2024/05/21 13:58



乱码看你指的是哪里乱码

是数据库乱码还是页面乱码

主要是数据库以乱码的形式存储。

当通过查询语句返回数据到页面上时,又是正确的形式

终端页面用gbk是什么意思呢

这个工程编写代码时用gbk格式




wamp的初始编码设置


wamp的character_set_connection初始编码会这样设置是有原因的,因为在安装wamp时,我们选择了中文安装,所以character_set_connection、character_set_results设为了gbk,而wamp是法国人发明的,所以 character_set_database等都是Latin1(瑞典语)格式。

这个编码设置本身就会造成数据库乱码。
因为character_set_connection设为gbk,character_set_database却设为Latin1
也就是说,创建数据库时,默认数据库的编码格式是Latin1,而在zend studio上终端页面的编码格式默认是gbk。
从终端页面上传送过来的gbk格式的数据,经过连接层字符集,还是gbk格式,存储在Latin1格式的数据库上就会出现乱码,典型的乱码符号是¥。

那么改变数据库和终端页面的编码格式会怎么样呢?
把数据库的和终端页面的编码格式设为utf-8,从终端页面传送过来的utf-8格式的数据,经过连接层字符集,转为gbk格式,存储在utf-8格式的数据库上还是会出现乱码。

举其他例子 

原文链接:http://www.jb51.net/article/30864.htm


向默认字符集为latin1的数据表插入utf8编码的数据前设置了连接字符集为utf8


– 插入时根据连接字符集设置,character_set_client、character_set_connection和character_set_results均为utf8;

– 插入数据将经过utf8=>utf8=>latin1的字符集转换,若原始数据中含有/u0000~/u00ff范围以外的Unicode字符,会因为无法在latin1字符集中表示而被转换为“?”(0x3F)符号,以后查询时不管连接字符集设置如何都无法恢复其内容了。



再举个例子

现在有一个utf8编码数据库,客户端连接使用GBK编码,connection使用默认ISO8859-1(也就是mysql中的latin1),我们在客户端发送“中文”这个字符串,客户端将发送一串GBK格式的二进制码给connection层,connection层以ISO8859-1格式将这段二进制码发送给数据库,数据库将这段编码以utf8格式存储下来,我们将这个字段以utf8格式读取出来,肯定是得到乱码,也就是说中文数据在写入数据库时是以乱码形式存储的,  在同一个客户端进行查询操作时,做了一套和写入时相反的操作,错误的utf8格式二进制 码又被转换成正确的GBK码并正确显示出来



0 0
原创粉丝点击