Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  The BLOB and TEXT Types

13.3.4 二进制大对象和文本类型

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

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

如果严格的 SQL 模式未启用,并且您将一个值分配给 BLOBTEXT 列,该值超过列的最大长度,则该值将被截断以适应,并生成警告。如果您想要在严格的 SQL 模式下发生错误(而不是警告)并且抑制值的插入,可以使用严格的 SQL 模式。见 第 7.1.11 节,“服务器 SQL 模式”

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

对于 TEXTBLOB 列,没有插入时的填充和选择时的字节剥离。

如果 TEXT 列被索引,索引条目比较将在末尾添加空格。这意味着,如果索引需要唯一的值,仅在尾随空格数量上不同的值将导致重复键错误。例如,如果表中包含 'a',尝试存储 'a ' 将导致重复键错误。这不适用于 BLOB 列。

在大多数方面,您可以将 BLOB 列视为可以任意大小的 VARBINARY 列。类似地,您可以将 TEXT 列视为 VARCHAR 列。BLOBTEXTVARBINARYVARCHAR 的区别在于:

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

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

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

BLOBTEXT 值可能非常长,因此您可能会遇到一些约束:

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

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

Note

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