MySQL校对集问题
校对集:数据比较的方式
校对集有三种格式
_bin:binary,二进制比较,取出二进制位,一位一位的比较,区分大小写
_cs:case sensitive , 大小写敏感,区分大小写
_ci:case insensitice,大小写不敏感,不区分大小写
查看数据库所支持的校对集
-- 查看所有校对集
Show collation;
校对集应用:只有当数据产生比较的时候,校对集才会生效
对比使用utf8的_bin 和 ci
-- 创建表使用不同的校对集
Create table my_collate_bin(
Name char(1)
)charset utf8 collate utf8_bin;
-- 创建表使用不同的校对集
Create table my_collate_ci(
Name char(1)
)charset utf8 collate utf8_general_ci;
插入数据
Insert into my_collate_bin values(‘a’),(‘A’),(‘B’),(‘b’);
Insert into my_collate_ci values(‘a’),(‘A’),(‘B’),(‘b’);
比较:根据某个字段进行排序:order by 字段名 [asc desc]; asc 升序,desc 降序,默认是升序
-- 排序查找
Select * from my_collate_ci order by name;
Select * from my_collate_bin order by name;
校对集:必须在没有数据之前声明好,如果有了数据在进行校对集的修改,则无效。
-- 有数据后修改校对集
Alter table my_collate_ci collate = utf8_bin;
Web乱码问题
动态网站有三部分构成:浏览器,Apache服务器,数据库服务器,三部分都有自己的字符集(中文),数据需要在三个部分之间来回传递,很容易产生乱码。
如何解决乱码问题:统一编码(三码合一)
但事实上不可能;浏览器是用户管理(根本不可能控制),但是必须要解决这些问题