乱码问题——解决啊!

2017-09-30  本文已影响0人  咸鱼有梦想呀

一、中文数据的本质是字符集问题

计算机只识别二进制,所以需要有一个二进制与字符的对应关系(字符集)

1.查看所有字符集

show character set;

39种字符集

2.查看服务器默认对外处理的字符集

show variables like 'character_set%';

字符集

3.客户端数据只能是GBK,而服务器认为是utf8,所以需要改变服务器默认接收字符集为GBK

set character_set_client = gbk;

改变服务器默认接收字符集为GBK

4.客户端向服务器插入中文数据:

插入中文数据

查看数据效果时:数据来源是服务器,解析数据是客户端(客户端只识别gbk:只会两个字节一个汉字)但服务器给数据确实utf8(三个字节一个汉字)所以出现乱码

查看数据时的乱码

5.修改服务器给客户端的数据字符集为gbk

set character_set_results = gbk;

修改服务器给客户端的数据字符集为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降序,默认是升序

比较
校对集:必须在没有数据之前声明好,如果有了数据,那么再进行校对修改,修改无效。
上一篇 下一篇

猜你喜欢

热点阅读