MySQL(二、字符集校对集)

来源:互联网 发布:程序员数学2pdf百度云 编辑:程序博客网 时间:2024/06/06 03:26

字符集:

计算机只识别二进制,人类更多是识别符号。需要有个二进制与字符的对应关系。这个对应关系就是字符集。

--查看服务器到底识别哪些字符集:show character set;--查看服务器默认的对外处理的字符集:show variables like ‘character_set%’;

这里写图片描述

其中:

client:服务器默认的客户端来的数据的字符集connection:连接层字符集,是字符集转变的中间者,如果统一了效率更高,不统一也没有问题。database:当前所在数据库的字符集result:服务器默认的给外部数据的字符集

改变服务器接收数据的字符集,character_set_client
改变服务器返回数据的字符集,character_set_result
快捷方式:set names 字符集(改变character_set_client,connection,result)

–set 变量 = 值;修改只对当前客户端,当次链接有效,关闭失效。

--修改服务器认为的客户端数据的字符集为GBK:set character_set_client = gbk;

设置服务器对客户端的字符集的编码,可以使用快捷方式:set names 字符集

set names gbk;  --等价于 character_set_client,character_set_results,character_set_connection;

校对集

校对集:数据比较的方式。

校对集有三种格式:_bin:binary,二进制比较,取出二进制位,一位一位比较(从左到右),可以区分大小写。_cs:case sensitive, 大小写敏感,区分大小写。_ci:case insensitive,大小写不敏感,不区分大小写。

查看数据库所支持的校对集:

show collation

校对集应用:只有当数据产生比较的时候,校对集才会生效。
默认校对集:utf8_general_ci
这里写图片描述

对比使用utf8的_bin和_ci来验证不同的校对集的效果:

--创建表使用不同的校对集create table student_bin(name char(1)) charset utf8 collate utf8_bin;create table student_ci (name char(1)) charset utf8 collate utf8_general_ci;--插入数据insert into student_bin values('a'),('A'),('b'),('B');insert into student_ci values('a'),('A'),('b'),('B');

这里写图片描述

比较:根据某个字段排序,order by 字段名[asc|desc], asc:升序, desc:降序,默认升序。

--根据姓名查找,按照升序输出(默认)select * from student_bin order by name;select * from student_ci order by name;

这里写图片描述

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

Web乱码问题

中文数据问题本质是字符集问题。

动态网站由三部分构成:浏览器,apache服务器,数据库服务器,三个部分都有自己的字符集(中文),数据需要在三个部分之间来回传递,很容易产生乱码。

如何解决乱码:统一编码(三码合一)
但是事实上不可能:浏览器是用户管理(根本不可控制)
但是必须要解决这些问题,主要靠程序来做。