6.2.3.2 BLOB 和 TEXT 类型

来源:互联网 发布:mac chmod 777 编辑:程序博客网 时间:2024/05/17 03:08


一个 BLOB 是一个可以保存一可变数量的数据的二进制大对象。四个 BLOB 类型(TINYBLOBBLOBMEDIUMBLOB  LONGBLOB)之间的不同仅仅在于他们能保存值的最大长度不一致。查看章节 6.2.6 列类型存储需求。

四个 TEXT 类型(TINYTEXTTEXTMEDIUMTEXT  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 值在内部由一个独立分配的对象表示。这与其它所有的列类型不一样,当表被打开时,它们被按每列分配一次存储。

0 0
原创粉丝点击