MySQL(二、字符集校对集)

字符集:

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

--查看服务器到底识别哪些字符集:
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服务器,数据库服务器,三个部分都有自己的字符集(中文),数据需要在三个部分之间来回传递,很容易产生乱码。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值