您的位置:首页 > 其它

6.2.3.2 BLOB 和 TEXT 类型

2015-06-03 14:19 169 查看

一个
BLOB
是一个可以保存一可变数量的数据的二进制大对象。四个
BLOB
类型(
TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB
)之间的不同仅仅在于他们能保存值的最大长度不一致。查看章节 6.2.6
列类型存储需求。
四个
TEXT
类型(
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
)对应与四个
BLOB
类型,并且有相同的最大长度和存储需求。在
BLOB
TEXT
类型之间的唯一差别就是,对
BLOB
值是以字母大小写敏感的方式进行排序和比较的,而对
TEXT
值以忽略字母大小写方式进行排序和比较。换句话说,
TEXT
是一个忽略字母大小写的
BLOB

如果将一个超过列类型最大长度的值赋给一个
BLOB
TEXT
列,该值将被截断以适应它。
在大多数方面,可以将一个
TEXT
列看作是一个你所希望大
VARCHAR
列。同样的,
BLOB
列可以看作是一个
VARCHAR
BINARY
列。差别就在于:

在 MySQL 3.23.2 和更新的版本中,可以在
BLOB
TEXT
列上建立索引。而较老版本的 MySQL 是不支持的。
BLOB
and
TEXT
列值被存储时,尾部的空格不会被剪切,这与
VARCHAR
列是不一样的。
BLOB
TEXT
列不可以有
DEFAULT
值。

MyODBC
LONGVARBINARY
定义
BLOB
值,以
LONGVARCHAR
定义
TEXT
值。
因为
BLOB
TEXT
值可以非常地长,在使用它们时可能会遇到某些限制:

如果希望在一个
BLOB
TEXT
列上使用
GROUP BY
ORDER
BY
,必须将该列值转换为一个定长对象。这样做的标准做法是使用
SUBSTRING
函数。例如:
mysql> SELECT comment FROM tbl_name,SUBSTRING(comment,20) AS substr
->                 ORDER BY substr;

如果你不这样做,只有列值的前
max_sort_length
个字节用于排序。
max_sort_length
缺省的值为 1024;在启动
mysqld
服务时,可以使用
-O
选项对它进行更改。可以在一个包含
BLOB
TEXT
值的表达式上进行分组,通过指定列的位置或使用一个别名:
mysql> SELECT id,SUBSTRING(blob_col,1,100) FROM tbl_name GROUP BY 2;
mysql> SELECT id,SUBSTRING(blob_col,1,100) AS b FROM tbl_name GROUP BY b;


一个
BLOB
TEXT
对象的最大尺寸由其类型决定,但是在客户端和服务器之间实际所能传送的最大值,是由可用内存总数和通讯缓冲区的大小来决定的。你可以改变报文缓冲区的大小,但必须在服务器端与客户端同时这么做。查看章节 5.5.2
调节服务器参数。

注意,每个
BLOB
TEXT
值在内部由一个独立分配的对象表示。这与其它所有的列类型不一样,当表被打开时,它们被按每列分配一次存储。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: