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'(取决于排序规则) -
尾部空格处理根据字符集而定
性能与使用建议
- 优先用
TEXT的场景:
-
存储日志、JSON 或 XML 数据
-
需要文本搜索(配合
FULLTEXT索引) -
涉及字符集转换的场景
- 优先用
BLOB的场景:
-
存储加密数据或序列化对象
-
需要精确字节匹配(如哈希值校验)
-
处理非文本文件(如图片)
- 通用建议:
-
避免在表中存超大文件:超过 1MB 的文件建议存文件系统,数据库只存路径
-
谨慎使用
SELECT *:大字段会显著拖慢查询 -
索引限制:只能对列的前缀建索引(如
INDEX (text_col(100)))
MySQL 8.0+ 的
JSON类型比TEXT更适合存储结构化文本,支持原生查询和验证。

发表评论
所有评论