文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  BLOB 和 TEXT 类型

13.3.4 BLOB 和 TEXT 类型

BLOB 是一个二进制大对象,可以容纳可变数量的数据。四种 BLOB 类型分别是 TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们的区别仅在于它们可以容纳的值的最大长度。四种 TEXT 类型分别是 TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。它们对应于四种 BLOB 类型,并且具有相同的最大长度和存储需求。请参阅第 13.7 节“数据类型存储需求”。

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

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

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

对于 TEXT 和 BLOB 列,插入时不填充,选择时不删除字节。

如果对 TEXT 列建立索引,则索引条目比较会在末尾进行空格填充。这意味着,如果索引需要唯一值,则对于仅尾随空格数量不同的值,将发生重复键错误。例如,如果表包含 'a',则尝试存储 'a ' 会导致重复键错误。这对于 BLOB 列不成立。

在大多数情况下,您可以将 BLOB 列视为一个 VARBINARY 列,该列可以根据您的需要设置大小。同样,您可以将 TEXT 列视为一个 VARCHAR 列。BLOB 和 TEXT 与 VARBINARY 和 VARCHAR 的区别在于以下方面

  • 对于 BLOB 和 TEXT 列上的索引,您必须指定索引前缀长度。对于 CHAR 和 VARCHAR,前缀长度是可选的。请参阅第 10.3.5 节“列索引”。

  • BLOB 和 TEXT 列不能具有 DEFAULT 值。

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

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

MySQL Connector/ODBC 将 BLOB 值定义为 LONGVARBINARY,将 TEXT 值定义为 LONGVARCHAR。

由于 BLOB 和 TEXT 值可能非常长,因此在使用它们时可能会遇到一些限制

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

在某些情况下,您可能希望将媒体文件之类的二进制数据存储在 BLOB 或 TEXT 列中。您可能会发现 MySQL 的字符串处理函数对处理此类数据很有用。请参阅第 14.8 节 “字符串函数和运算符”。出于安全性和其他原因,通常最好使用应用程序代码来执行此操作,而不是授予应用程序用户FILE 权限。您可以在 MySQL 论坛 (http://forums.mysql.com/) 中讨论各种语言和平台的具体细节。

注意

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