首页 >> 基础教程

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. 字符集与编码

特性BLOBTEXT
字符集无字符集概念关联表的字符集(如 utf8mb4
存储方式直接存储原始字节按字符集编码存储(如 UTF-8)
数据转换插入/读取时不转换插入/读取时自动转换字符集
乱码风险无(保持二进制原样)字符集不匹配时可能乱码

3. 子类型与最大长度

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

类型最大长度存储开销典型场景
TINYBLOB/TINYTEXT255 字节1 字节短文本/小图标
BLOB/TEXT65,535 字节 (64KB)2 字节普通文章/中等图片
MEDIUMBLOB/MEDIUMTEXT16,777,215 字节 (16MB)3 字节长文档/高清图片
LONGBLOB/LONGTEXT4,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 索引)

    • 涉及字符集转换的场景

  2. 优先用 BLOB 的场景

    • 存储加密数据或序列化对象

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

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

  3. 通用建议

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

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

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

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


最新文章
InnoDB 和 MyISAM 主要有什么区别?2025-07-06
mysql存储引擎应该怎么选择?2025-07-06
mysql的几种存储引擎2025-07-06
MySQL 的段区页行2025-07-06
一条更新语句是如何执行的?2025-07-06
mysql中一条查询语句是如何执行的?2025-07-02
MySQL基础架构及执行流程解析2025-07-02
MySQL SQL语法树解析过程详解2025-07-02
mysql中SQL 的隐式数据类型转换?2025-07-01
MySQL 第 3-10 条记录怎么查?2025-06-30
备案号:蜀ICP备2023042032号-1