MySQL 8.0 参考手册  / 第 11 章数据类型  / 11.3 字符串数据类型  /  11.3.4 BLOB 和 TEXT 类型

11.3.4 BLOB 和 TEXT 类型

ABLOB是一个二进制大对象,可以容纳可变数量的数据。四种BLOB 类型是TINYBLOBBLOBMEDIUMBLOBLONGBLOB。它们仅在它们可以容纳的值的最大长度上有所不同。四种TEXT类型是 TINYTEXTTEXTMEDIUMTEXTLONGTEXT。它们对应于四种BLOB类型,并且具有相同的最大长度和存储要求。请参阅 第 11.7 节,“数据类型存储要求”

BLOB值被视为二进制字符串(字节字符串)。它们有binary 字符集和排序规则,比较和排序是基于列值中字节的数值。 TEXT值被视为非二进制字符串(字符串)。它们具有 以外的字符集 binary,并且根据字符集的排序规则对值进行排序和比较。

如果未启用严格的 SQL 模式,并且您为 BLOBTEXT列分配了一个超过该列最大长度的值,该值将被截断以适合并生成警告。对于非空格字符的截断,您可能会导致发生错误(而不是警告)并通过使用严格的 SQL 模式禁止插入值。请参阅第 5.1.10 节,“服务器 SQL 模式”

无论 SQL 模式如何,从要插入TEXT列的值中截断多余的尾随空格总是会生成警告。

对于TEXTBLOB列,插入时没有填充,选择时也没有删除字节。

如果TEXT列被索引,则索引条目比较在末尾用空格填充。这意味着,如果索引需要唯一值,则对于仅尾随空格数不同的值会发生重复键错误。例如,如果表包含'a',则尝试存储'a '会导致重复键错误。BLOB对于列 来说情况并非如此。

在大多数方面,您可以将BLOB 列视为任意VARBINARY大的列。同样,你可以把一 TEXT列看成一 VARCHAR列。 BLOB并在以下方面 有所 TEXT不同 :VARBINARYVARCHAR

如果将BINARY属性与 TEXT数据类型一起使用,则会为该列分配_bin列字符集的二进制 ( ) 排序规则。

LONGLONG VARCHAR映射到MEDIUMTEXT数据类型。这是一个兼容性功能。

MySQL Connector/ODBC 将BLOB值定义为 LONGVARBINARY和将TEXT 值定义为LONGVARCHAR.

因为BLOBTEXT 值可能非常长,您可能会在使用它们时遇到一些限制:

每个BLOBTEXT值在内部由单独分配的对象表示。这与所有其他数据类型形成对比,在打开表时,为每列分配一次存储空间。

在某些情况下,可能需要将二进制数据(例如媒体文件)存储在BLOBTEXT列中。您可能会发现 MySQL 的字符串处理函数对于处理此类数据很有用。请参阅 第 12.8 节,“字符串函数和运算符”。出于安全和其他原因,通常最好使用应用程序代码而不是为应用程序用户提供 FILE特权。您可以在 MySQL 论坛 ( http://forums.mysql.com/ ) 中讨论各种语言和平台的细节。

笔记

mysql客户端中,二进制字符串使用十六进制表示法显示,具体取决于--binary-as-hex. 有关该选项的更多信息,请参阅第 4.5.1 节,“mysql — MySQL 命令行客户端”