首先声明一下,MySQL,那些你不知道的系统教程主要参考《MySQL完全手册》。写此文主要是为了让自己不太好用的脑袋瓜子可以更加注意这些细节,因为最短的板决定你的成长程度。
其实,CHAR和VARCHAR的区别就在于CHAR是定长字符串,而VARCHAR代表的是变长字符串。
默认情况下,MySQL是大小写不敏感的,例如:
CREATE TABLE data (name CHAR(5));
INSERT INTO data VALUES ('HUGO');
SELECT * FROM data WHERE name = 'hugo';
INSERT INTO data VALUES ('HUGO');
SELECT * FROM data WHERE name = 'hugo';
结果上面插入的那条记录被搜出来了,(小样,变小写我就不认识你啦? )
怎么样解决这个问题呢?好办,把字符串全都转换成二进制数来比较不就行了?所以MySQL提供了这么一个修饰符。
BINARY关键字,它告诉MySQL,在它之后的字符串应该以二进制方式被处理。这时,当在字符串上执行比较运算符时,MySQL将牢牢记住字符串的大小写。CHAR和VARCHAR都适用此修饰符。
ALTER TABLE data CHANGE CHAR(5) BINARY;
SELECT * FROM data WHERE name = 'hugo';
SELECT * FROM data WHERE name = 'hugo';
小样,换小写我还真就不认识你了。。
CHAR类型和VACHAR之间的差别在于MySQL处理这个指示器(长度指示器)的方式不同:CHAR把这个大小视为值的准确大小(用空格填补比较短的值,所以达到了这个大小),而VARCHAR类型把它视为最大值并且只使用了在存储字符串实际上需要的字节数(增加一个额外的字节记录长度)
TEXT和BLOB类型在分类和比较的方式上不同,BLOB类型区分大小写,TEXT类型不区分大小写。MySQL手册用“TEXT类型是不区分大小写的BLOB类型”最准确地说明了这一点。
其实在平时工作中,我很少用到BLOB类型,导致今天我在翻这本手册的时候几乎都忘了有这么个家伙存在。