mysql 字符集,校验规则,以及默认编码

来源:互联网 发布:浙江省网络作协 编辑:程序博客网 时间:2024/06/05 07:59

show character set; 显示字符集
create tab demo(name varchar(30) character set utf8
        name2 varchar(30) character set gbk
);
show create table demo\g
inset into demo(name,name2)values("张","张");
select length(name),length(name2) from demo;
inset into demo(name,name2)values("a","a");
select length(name),length(name2) from demo;
...............................................
结论:处理单字节时候,gbk和utf8长短无差异,处理汉字则不一样。
select char_length(name),char_length(name) from demo
查询字符个数。

字符集校验规则。
show collation;通过这个命令可以看到个中字符集支持的校对规则。
一般以ci为结尾的为不区分大小写,general

create table demo2(name varchar(30) character set utf8
                    collate utf8_bin,
                   name2 varchar(30) character set utf8
                    collate utf8_general_ci);

insert into demo2(name ,name2) values('a','a'),('b','b'),('A','A');
select * from demo2;//看看区分大小写和不区分的区别。
select * from demo2 where name2='a';
select * from demo2 where name='a';//看看以上的结果区别。
看看校验级的排序。
insert into demo2(name ,name2) values('B','B');
select * from demo2 order by name;

字段指定了字符集,没有指定校对规则,那么他会采用默认的。
如果制定了校对规则,没有指定字符集,那么就采用校对规则所对应的字符集。
如果字段没有指定校对规则,也没有指定字符集,那么依据表的字符集与校对规则。
如果表也没有指定校对规则和字符集,那么依据库的字符集。
如果库也没有指定,mysql的默认字符集与校对规则。
select * from demo2 order by name2;
  看看这两行代码 不同的校验规则,排序有什么不同。

create table demo3(name binary(3),name2 varchar(3)) default
character set=utf8;

insert into demo3(name,name2) values('a','a');
insert into demo3(name,name2) values('中','中');
insert into demo3(name,name2) values('中国','中国');
insert into demo3(name,name2) values('中国人','中国人');