# 11.3.4 BLOB 和 TEXT 类型
一种斑点
是一个二进制大对象,可以容纳可变数量的数据。四个斑点
类型是小斑点
,斑点
,中块
, 和长块
.这些仅在它们可以保存的值的最大长度上有所不同。四个文本
类型是小文本
,文本
,中文本
, 和长文
.这四个对应斑点
类型并具有相同的最大长度和存储要求。看第 11.7 节,“数据类型存储要求”.
斑点
值被视为二进制字符串(字节字符串)。他们有二进制
字符集和排序,比较和排序基于列值中字节的数值。文本
值被视为非二进制字符串(字符串)。他们有一个字符集二进制
, 并根据字符集的排序规则对值进行排序和比较。
如果未启用严格 SQL 模式并且您将值分配给斑点
要么文本
超过列的最大长度的列,该值将被截断以适应并生成警告。对于非空格字符的截断,您可能会导致发生错误(而不是警告)并使用严格的 SQL 模式禁止插入值。看第 5.1.11 节,“服务器 SQL 模式”.
从要插入的值中截断多余的尾随空格文本
无论 SQL 模式如何,列都会生成警告。
为了文本
和斑点
列,插入时没有填充,选择时没有字节被剥离。
如果一个文本
列被索引,索引条目比较在最后用空格填充。这意味着,如果索引需要唯一值,则仅在尾随空格数不同的值会出现重复键错误。例如,如果一个表包含'一种'
, 尝试存储'一种 '
导致重复键错误。这不是真的斑点
列。
在大多数方面,您可以将斑点
列作为变量
可以任意大的列。同样,你可以认为一个文本
列作为VARCHAR
柱子。斑点
和文本
与......不同变量
和VARCHAR
通过以下方式:
对于索引
斑点
和文本
列,您必须指定索引前缀长度。为了字符
和VARCHAR
,前缀长度是可选的。看第 8.3.5 节,“列索引”.-
如果您使用
二进制
带有 a 的属性文本
数据类型,为该列分配二进制 (_bin
) 列字符集的排序规则。
长
和长 VARCHAR
映射到中文本
数据类型。这是一个兼容性功能。
MySQL 连接器/ODBC 定义斑点
价值观朗瓦尔二进制
和文本
价值观朗瓦查尔
.
因为斑点
和文本
值可能非常长,在使用时可能会遇到一些限制:
只有第一个
最大排序长度
排序时使用列的字节。的默认值最大排序长度
是1024。通过增加最大排序长度
在服务器启动或运行时。任何客户端都可以更改其会话的值最大排序长度
变量:mysql> SET max_sort_length = 2000; mysql> SELECT id, comment FROM t -> ORDER BY comment;
实例
斑点
或文本
使用临时表处理的查询结果中的列会导致服务器使用磁盘上的表而不是内存中的表,因为记忆
存储引擎不支持这些数据类型(请参阅第 8.4.4 节,“MySQL 中的内部临时表使用”)。使用磁盘会导致性能损失,因此包括斑点
要么文本
查询结果中的列仅当它们确实需要时。例如,避免使用选择 *
,它选择所有列。最大尺寸
斑点
要么文本
对象由它的类型决定,但你实际可以在客户端和服务器之间传输的最大值取决于可用内存量和通信缓冲区的大小。您可以通过更改的值来更改消息缓冲区大小max_allowed_packet
变量,但您必须对服务器和客户端程序都这样做。例如,两者mysql和mysql转储使您能够更改客户端max_allowed_packet
价值。看第 5.1.1 节,“配置服务器”,第 4.5.1 节,“mysql - MySQL 命令行客户端”, 和第 4.5.4 节,“mysqldump - 数据库备份程序”.您可能还想将数据包大小和您存储的数据对象的大小与存储要求进行比较,请参阅第 11.7 节,“数据类型存储要求”每个
斑点
要么文本
value 在内部由单独分配的对象表示。这与所有其他数据类型形成对比,所有其他数据类型在打开表时每列分配一次存储。在某些情况下,可能需要将二进制数据(例如媒体文件)存储在
斑点
要么文本
列。您可能会发现 MySQL 的字符串处理函数对处理此类数据很有用。看第 12.8 节,“字符串函数和运算符”.出于安全和其他原因,通常最好使用应用程序代码而不是为应用程序用户提供文件
特权。您可以在 MySQL 论坛 (http://forums.mysql.com/ (opens new window))。
笔记
内mysql客户端,二进制字符串使用十六进制表示法显示,具体取决于--binary-as-hex
.有关该选项的更多信息,请参阅第 4.5.1 节,“mysql - MySQL 命令行客户端”.