一、中文数据的本质是字符集问题
计算机只识别二进制,所以需要有一个二进制与字符的对应关系(字符集)
1.查看所有字符集
39种字符集show character set;
2.查看服务器默认对外处理的字符集
字符集show variables like 'character_set%';
3.客户端数据只能是GBK,而服务器认为是utf8,所以需要改变服务器默认接收字符集为GBK
改变服务器默认接收字符集为GBKset character_set_client = gbk;
4.客户端向服务器插入中文数据:
插入中文数据查看数据效果时:数据来源是服务器,解析数据是客户端(客户端只识别gbk:只会两个字节一个汉字)但服务器给数据确实utf8(三个字节一个汉字)所以出现乱码
查看数据时的乱码5.修改服务器给客户端的数据字符集为gbk
修改服务器给客户端的数据字符集为gbkset character_set_results = gbk;
6.查看数据效果
不乱码咯set 变量 = 值;修改只是会话级别(当前客户端,当次链接有效;关闭失效)
快捷设置字符集
快捷设置字符集set names 字符集
二、web乱码问题
动态网站由三部分构成:浏览器,apache服务器(PHP),数据库服务器;三部分都有其自己的字符集(中文),数据需要在三部分之间传递,容易出现乱码。所以需要 统一编码(三码合一)
乱码问题解决:
解决方法三、校对集问题
校对集:数据比较方式
校对集有三种格式:
_bin:binary,二进制比较,取出二进制位,一位一位的比较,区分大小写
_cs:case sensitive,大小写敏感,区分大小写
_ci:case insensitice,大小写不敏感,不区分大小写
查看数据库所支持的校对集
校对集show collation;
校对集应用:当数据产生比较的时候,校对集才会生效。
1.使用utf8的_bin和_ci来验证不同校对集的效果
①创建不同校对集对应的表
②插入数据
插入数据③比较:根据某个字段进行排序
比较order by <字段名> [asc/desc]; asc升序,desc降序,默认是升序
校对集:必须在没有数据之前声明好,如果有了数据,那么再进行校对修改,修改无效。
网友评论