数据库MySQL的富文本编辑器字段选型建议
富文本编辑器 MySQL 字段选型:TEXT / MEDIUMTEXT / LONGTEXT
很多人在设计MySQL数据库表结构,认为富文本编辑器包含文本、图片、视频等各种素材,采用BLOB二进制方式更加合理,
我先纠正如下几个概念:
-
BLOB:二进制大对象,存图片、文件、二进制流;不适合富文本 HTML
-
TEXT:文本大对象,存字符串、HTML、富文本内容,富文本必选 TEXT 系列
MySQL 文本类型容量对照表:| 类型 | 最大存储长度 | 适用场景 ||------------|---------------|------|| TINYTEXT | 256 字节 | 简短简介、摘要 || TEXT | 64KB(65535) | 短文章、简单富文本、公告 || MEDIUMTEXT | 16MB | **绝大多数博客 / 后台富文本(推荐)** || LONGTEXT | 4GB | 超大文档、带大量图片 base64、长篇教程 |
一、为什么不用 BLOB(BINARY 二进制类型)
-
BLOB 存储二进制,MySQL不做字符集校对、不支持全文索引,搜文章内容、模糊查询会失效;
-
富文本是 HTML 文本,带中文、标签、换行,用 TEXT 会自动按 utf8mb4 编码存储,无乱码;
-
BLOB 排序、检索性能远差 TEXT。
结论:富文本 HTML 内容绝对不用 BLOB,只用 TEXT 家族

二、三种 TEXT 选型推荐方案
方案 1:中小型后台、企业文章、普通博客(首选 MEDIUMTEXT)
-
容量 16MB,足够承载几万字文章 + 少量内嵌 base64 图片;
-
99% 的富文本业务都够用,平衡性能与存储;
-
建表示例:
CREATE TABLE article (id BIGINT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(255) NOT NULL COMMENT '标题',content MEDIUMTEXT NOT NULL COMMENT '富文本HTML内容',create_time DATETIME) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
方案 2:简单短内容、公告、简短说明(TEXT)
单篇内容不会超过 64KB(约 2~3 万汉字),用 TEXT 节省磁盘,性能略好。
方案 3:知识库、长篇教程、大量内嵌 base64 图片(LONGTEXT)
LONGTEXT 上限 4GB,但有明显缺点:
-
占用内存大,查询、复制、备份更慢;
-
不建议滥用,图片不要存 base64 放进富文本(核心优化点见下文); 仅当业务固定要内嵌大量图片、超大篇幅时使用。
三、生产环境最佳实践(关键优化,避免存储爆炸)
1. 禁止将图片转 base64 存入 content 字段
base64 体积比原图大 1.37 倍,几张图就能把 TEXT 撑满,查询加载极卡。 正确做法:
-
图片上传到对象存储(MinIO/OSS),返回图片 URL;
-
富文本只存
<img src="https://xxx/1.jpg">,content 只存纯 HTML 标签,体积极小。 此时普通博客直接用TEXT就足够,无需 MEDIUMTEXT。
2. 分离摘要与正文,减少大字段查询开销
大 TEXT/MEDIUMTEXT 字段会拖慢列表分页查询,拆分表:
-- 主表(列表查询只用这张,不带大文本)article_base(id, title, cover, summary, create_time)-- 扩展表(详情页再关联读取富文本)article_content(article_id PRIMARY KEY, content MEDIUMTEXT)
列表页只查 article_base,详情再 JOIN 读取富文本,大幅提升分页性能。
3. 字符集必须 utf8mb4
富文本会包含 emoji、特殊符号,字段 / 表统一 CHARSET=utf8mb4,避免表情乱码。
4. 不要对 MEDIUMTEXT/LONGTEXT 建普通索引
超长文本无法创建常规索引,全文检索使用 MySQL 全文索引:
ALTER TABLE article ADD FULLTEXT ft_content(content);-- 查询SELECT * FROM article WHERE MATCH(content) AGAINST('关键词');

四、最终总结推荐
-
通用后台、博客、CMS、富文本文章(最优) 图片存 OSS、HTML 仅存图片 URL →
MEDIUMTEXT -
简短公告、说明、短内容 →
TEXT -
超大文档、强制内嵌大量 base64 图片 →
LONGTEXT -
任何场景都不要使用 BLOB / LONGBLOB 存储富文本 HTML
原文链接
欢迎访问 小易撩挨踢
夜雨聆风