文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  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 命令行客户端”