6.2.3.2 BLOB 和 TEXT 类型



一个 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值