Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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在以下方面不同:

如果您使用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/) 中讨论各种语言和平台的细节。

Note

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