乐于分享
好东西不私藏

数据库MySQL的富文本编辑器字段选型建议

数据库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 二进制类型)

  1. BLOB 存储二进制,MySQL不做字符集校对、不支持全文索引,搜文章内容、模糊查询会失效;

  2. 富文本是 HTML 文本,带中文、标签、换行,用 TEXT 会自动按 utf8mb4 编码存储,无乱码;

  3. BLOB 排序、检索性能远差 TEXT。

结论:富文本 HTML 内容绝对不用 BLOB,只用 TEXT 家族

二、三种 TEXT 选型推荐方案

方案 1:中小型后台、企业文章、普通博客(首选 MEDIUMTEXT)

  • 容量 16MB,足够承载几万字文章 + 少量内嵌 base64 图片;

  • 99% 的富文本业务都够用,平衡性能与存储;

  • 建表示例:

CREATE TABLE article (  id BIGINT PRIMARY KEY AUTO_INCREMENT,  title VARCHAR(255NOT 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,但有明显缺点:

  1. 占用内存大,查询、复制、备份更慢;

  2. 不建议滥用,图片不要存 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('关键词');

四、最终总结推荐

  1. 通用后台、博客、CMS、富文本文章(最优) 图片存 OSS、HTML 仅存图片 URL → MEDIUMTEXT

  2. 简短公告、说明、短内容 → TEXT

  3. 超大文档、强制内嵌大量 base64 图片 → LONGTEXT

  4. 任何场景都不要使用 BLOB / LONGBLOB 存储富文本 HTML


原文链接  https://www.yijunzhao.cn/archives/mysql-rich-text-editor-field-type-recommendation

欢迎访问  小易撩挨踢 

https://www.yijunzhao.cn/