mysql函数之十:mysql 字符串类型及二进制字符串类型大小写比较

本文详细介绍了MySQL中CHAR和VARCHAR两种字符串类型的区别,并解释了如何通过BINARY关键字实现大小写敏感的字符串比较。此外还对比了TEXT与BLOB类型在大小写处理上的不同。

首先声明一下,MySQL,那些你不知道的系统教程主要参考《MySQL完全手册》。写此文主要是为了让自己不太好用的脑袋瓜子可以更加注意这些细节,因为最短的板决定你的成长程度。

其实,CHAR和VARCHAR的区别就在于CHAR是定长字符串,而VARCHAR代表的是变长字符串。


默认情况下,MySQL是大小写不敏感的,例如:

CREATE TABLE data (name CHAR(5));
INSERT INTO data VALUES ('HUGO');
SELECT * FROM data WHERE name = 'hugo';

结果上面插入的那条记录被搜出来了,(小样,变小写我就不认识你啦? :lol:

怎么样解决这个问题呢?好办,把字符串全都转换成二进制数来比较不就行了?所以MySQL提供了这么一个修饰符。

BINARY关键字,它告诉MySQL,在它之后的字符串应该以二进制方式被处理。这时,当在字符串上执行比较运算符时,MySQL将牢牢记住字符串的大小写。CHAR和VARCHAR都适用此修饰符。

ALTER TABLE data CHANGE CHAR5BINARY;
SELECT * FROM data WHERE name = 'hugo';

:idea: 小样,换小写我还真就不认识你了。。

CHAR类型和VACHAR之间的差别在于MySQL处理这个指示器(长度指示器)的方式不同:CHAR把这个大小视为值的准确大小(用空格填补比较短的值,所以达到了这个大小),而VARCHAR类型把它视为最大值并且只使用了在存储字符串实际上需要的字节数(增加一个额外的字节记录长度)

TEXT和BLOB类型在分类和比较的方式上不同,BLOB类型区分大小写,TEXT类型不区分大小写。MySQL手册用“TEXT类型是不区分大小写的BLOB类型”最准确地说明了这一点。

其实在平时工作中,我很少用到BLOB类型,导致今天我在翻这本手册的时候几乎都忘了有这么个家伙存在。 :mrgreen:

转载于:https://www.cnblogs.com/duanxz/archive/2012/12/06/2804425.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值