首页 >> 基础教程

mysql中blob 和 text 有什么区别?

在 MySQL 中,BLOB 和 TEXT 都是用于存储大量数据的数据类型,但它们在存储内容类型、字符处理和行为特性上有本质区别。以下是详细对比:

核心区别总结表

特性

BLOB (Binary Large Object)

TEXT

存储内容

二进制数据(原始字节)

文本数据(字符)

典型用途

图片、音频、视频、加密数据、压缩文件

文章、日志、JSON/XML、代码

字符集处理

无字符集,直接存储字节

关联字符集(如 utf8mb4)

排序规则

按字节值排序(二进制排序)

按字符集排序规则排序

最大长度

与 TEXT 相同(65KB~4GB)

与 BLOB 相同(65KB~4GB)

尾部空格处理

保留所有字节(包括 0x00

根据字符集处理尾部空格

比较操作

区分大小写('A' != 'a'

取决于排序规则(可能不区分大小写)

详细解析

1. 存储内容类型

  • BLOB
    存储原始二进制数据(字节序列):

    • 图片文件(JPEG/PNG)

    • 音频/视频文件

    • 加密数据或压缩文件(ZIP)

    • 序列化对象(如 Python pickle)

    • 不适合存储文本(会丢失字符集信息)

  • TEXT
    存储字符串文本(字符序列):

    • 长篇文章或日志
    • JSON/XML 数据
    • HTML/CSS/JS 代码
    • 产品描述或用户评论
    • 不能存储二进制文件(会损坏数据)

2. 字符集与编码

特性

BLOB

TEXT

字符集

无字符集概念

关联表的字符集(如 utf8mb4

存储方式

直接存储原始字节

按字符集编码存储(如 UTF-8)

数据转换

插入/读取时不转换

插入/读取时自动转换字符集

乱码风险

无(保持二进制原样)

字符集不匹配时可能乱码

3. 子类型与最大长度

两种类型均有四种子类型,支持相同范围的长度:

类型

最大长度

存储开销

典型场景

TINYBLOB/TINYTEXT

255 字节

1 字节

短文本/小图标

BLOB/TEXT

65,535 字节 (64KB)

2 字节

普通文章/中等图片

MEDIUMBLOB/MEDIUMTEXT

16,777,215 字节 (16MB)

3 字节

长文档/高清图片

LONGBLOB/LONGTEXT

4,294,967,295 字节 (4GB)

4 字节

视频文件/整本书内容

注意:实际可用长度受 max_allowed_packet 参数限制(默认 4MB)

4. 排序与比较行为

  • BLOB

  • 排序基于字节数值(二进制顺序)

  • 比较区分大小写:'A' (0x41) ≠ 'a' (0x61)

  • 保留所有字节(包括 0x00 和尾部空格)

  • TEXT

  • 排序基于字符集排序规则(如 utf8mb4_general_ci

  • 比较可能不区分大小写:'A' = 'a'(取决于排序规则)

  • 尾部空格处理根据字符集而定

性能与使用建议

  1. 优先用 TEXT 的场景:
  • 存储日志、JSON 或 XML 数据

  • 需要文本搜索(配合 FULLTEXT 索引)

  • 涉及字符集转换的场景

  1. 优先用 BLOB 的场景:
  • 存储加密数据或序列化对象

  • 需要精确字节匹配(如哈希值校验)

  • 处理非文本文件(如图片)

  1. 通用建议:
  • 避免在表中存超大文件:超过 1MB 的文件建议存文件系统,数据库只存路径

  • 谨慎使用 SELECT *:大字段会显著拖慢查询

  • 索引限制:只能对列的前缀建索引(如 INDEX (text_col(100))

MySQL 8.0+ 的 JSON 类型比 TEXT 更适合存储结构化文本,支持原生查询和验证。

所有评论

最新文章
20.5 性能优化建议2026-05-08
20.4 复杂查询实现2026-05-08
20.3 表创建与数据初始化2026-05-08
20.2 数据库设计2026-05-08
20.1 项目需求分析:博客系统2026-05-08
19.4 自动化备份策略2026-05-08
19.3 导出和导入数据2026-05-08
19.2 恢复备份数据2026-05-05
19.1 使用mysqldump备份数据2026-05-05
18.4 实战:开发简单的学生管理系统2026-05-05
关于我 备案号:蜀ICP备2023042032号-1