MySQL 数据类型
char与varchar
- char性能优于varchar(会用1-2个字节存储字符串长度),也不易产生碎片,适合用于存储长度较为固定的字符串
- 进行字符比较时候默认是不区分大小写的
- char(4)可以存4个字符,根据编码方式占据不同的字节(UTF-8每个字符占据3字节)
- varchar(4)可以存4个字符,根据编码方式以及存放字节长度占据不同的字节(会用1-2个字节存储字符串长度)
- char和varchar末尾有空格的话,char会自动去掉空格后存储,varchar虽然不会去掉空格,但在进行字符串比较时,会去掉空格进行比较
字符比较区分大小写的方法:
- select时候加上binary,如:
select * from test where name like binary '%王%';
- 建表时候或者修改表列数据类型为
varchar(32) binary
这种格式
binary
- binary保存二进制字符串,它保存的是字节,没有字符集限制,比较时候比较的是字节,区分大小写,按字节比较比字符简单快速
- binary(8)可以保存8个字节的数据,结尾使用\0填充,而不是空格
Blob与Text
- BLOB是二进制大对象,容纳可变数量的数据。有4种类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。可容纳值的最大长度不同。
- TEXT类型也有四种:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。对应4种BLOB类型,有相同的最大长度和存储需求。
- 大体上可将BLOB列视为能够足够大的VARBINARY列,将TEXT列视为VARCHAR列。
- BLOB和TEXT列不能有 默认值。
由于BLOB和TEXT值可能会非常长,使用它们时可能遇到一些约束:
当排序时只使用该列的前max_sort_length个字节。max_sort_length的 默认值是1024;该值可以在启动mysqld服务器时使用–max_sort_length选项进行更改。
运行时增加max_sort_length的值可以在排序或组合时使更多的字节有意义。任何客户端可以更改其会话max_sort_length变量的值:
复制代码 代码如下:
mysql> SET max_sort_length = 2000;
mysql> SELECT id, comment FROM tbl_name
|
|
当你想要使超过max_sort_length的字节有意义,对含长值的BLOB或TEXT列使用GROUP BY或ORDER BY的另一种方式是将列值转换为固定长度的对象。标准方法是使用SUBSTRING函数。例如,下面的语句对comment列的2000个字节进行排序:
复制代码 代码如下:
mysql> SELECT id, SUBSTRING(comment,1,2000) FROM tbl_name
|
|
BLOB或TEXT对象的最大大小由其类型确定,但在客户端和服务器之间实际可以传递的最大值由可用内存数量和通信缓存区大小确定。你可以通过更改max_allowed_packet变量的值更改消息缓存区的大小,但必须同时修改服务器和客户端程序。例如,可以使用mysql和mysqldump来更改客户端的max_allowed_packet值。
每个BLOB或TEXT值分别由内部分配的对象表示。这与其它列类型形成对比,后者是当打开表时为每1列分配存储引擎。