mysql 字符集

mysql在建表的时候可以指定字符集和校对规则。校对规则有三种形式的结尾,_ci 代表了大小写不敏感,_cs是大小写敏感,_bin是二进制,也是大小写敏感的。
默认的校对规则是大小写不敏感的,所以如何我们建了这样一张表:
create table t (n varchar(10)) default charset=latin1;
insert into t values('w'), ('W');

然后查询
select * from t where n = 'w';

将会返回两条记录。
如果我们需要大小写敏感的查询,可以临时改变其校对规则:
select * from t where n collate latin1_general_cs = 'w';
这样将只有一条记录返回,但是如果n上有索引,那么索引通常是不能被使用的。
另外mysql中char和varchar末尾的空格会被忽略,
select * from t where n = 'w   ';

同样会返回两条结果,所以如果n上有unique index,那么只有末尾空格数有差别的两条记录会被认为是重复的。
如果希望比较末尾的空格,需要使用
select * from t where binary n = 'w  ';

同样这种形式也不能用到索引。
如果确实需要区别末尾的空格,可以使用varbinary类型,它是保存二进制的字符串,比较时也使用二进制,没有校对规则。

alter table t modify n varbinary(10);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值