本篇文章主要简单地介绍一下 MySQL 中 Text 与 Blob 字段类型的区别

在 MySQL 中 Text 与 Blob 字段这两个字段很容易让人感觉混淆,特别是我们平时用数据库工具建表字段时,到底是选 Text 还是选 Blob 好呢?

在讲二者区别前,先简单给大家简单总结下,在数据库中一些常见的数据类型:

MySQL 支持多种类型,大致可以分为三类:数值、日期 / 时间和字符串 (字符) 类型。

Mysql 中的字符串类型一般指:CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 和 SET

主要区别:

Blob 有 4 种类型: inyblob、Blob、mediumBlob 和 longBlob。它们只是可容纳值的最大长度不同。

Text 也有 4 种类型: tinyText、Text、mediumText 和 longText。这些类型同 Blob 类型一样,有相同的最大长度和存储需求。

  • Blob 系列没有字符集,并且排序和比较基于列值字节的数值值。Text 系列有一个字符集,并且根据字符集的校对规则对值进行排序和比较

  • 在 Text 或 Blob 系列的存储或检索过程中,不存在大小写转换,都一样!

  • 运行在非严格模式时,如果你为 Blob 或 Text 系列分配一个超过该系列类型的最大长度的值时,值被截取以保证适合。如果截掉的字符不是空格,将会产生一条警告。使用严格 SQL 模式,会产生错误,并且值将被拒绝而不是截取并给出警告。

  • 当保存或检索 Blob 和 Text 系列的值时,不删除尾部空格。

  • 对于 Blob 和 Text 系列的索引,必须指定索引前缀的长度。

  • Blob 和 Text 系列不能有默认值。

  • 当排序时只使用该列的前 max_sort_length 个字节。max_sort_length 的 默认值是 1024。

  • 当你想要使超过 max_sort_length 的字节有意义,对含长值的 BLOB 或 TEXT 列使用 GROUP BY 或 ORDER BY 的另一种方式是将列值转换为固定长度的对象。标准方法是使用 SUBSTRING 函数。

  • Blob 和 Text 对象的最大  大小由其类型确定,但在客户端和服务器之间实际可以传递的最大值由可用内存数量和通信缓存区大小确定。你可以通过更改 max_allowed_packet 变量的值更改消息缓存区的大小,但必须同时修改服务器和客户端程序。

总结:

以上就是 Text 和 Blob 两个字段类型的一些区别,这两个字段虽然范围是一致的,但是 Blob 是用来保存二进制数据类型,而 Text 则是用来保存字符数据类型。就比方说我们目前的博客,目前几乎所有博客里的内容,并不全是以二进制的方式存储在数据库中的,而是先把图片上传到服务器然后正文里使用 <img> 标签引用,这里博客就可以使用的是 Text 类型来存储;最后在再把图片换算成二进制保存到数据库中这里就采用 Blob 的数据类型来进行存储。