文档首页
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 类型分别是 TINYBLOBBLOBMEDIUMBLOBLONGBLOB。它们的区别仅在于它们可以容纳的值的最大长度。四种 TEXT 类型分别是 TINYTEXTTEXTMEDIUMTEXTLONGTEXT。它们对应于四种 BLOB 类型,并且具有相同的最大长度和存储需求。请参阅第 13.7 节“数据类型存储需求”

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

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

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

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

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

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

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

  • BLOBTEXT 列不能具有 DEFAULT 值。

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

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

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

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

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

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

注意

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