mysql什么时候用char,varchar,text,longtext
在 MySQL 中,CHAR
、VARCHAR
、TEXT
、LONGTEXT
都是用于存储字符串的数据类型,但它们的用途、性能和存储方式有所不同。以下是它们的使用场景和选择建议:
✅ 一、CHAR
:定长字符串
-
特点:固定长度,不足会用空格填充(查询时会自动去除)
-
最大长度:255 字符
-
存储方式:定长分配空间,速度快
-
适用场景:
- 长度固定的字段,如:身份证号、MD5 值、国家代码、手机号等
- 查询频繁、对性能要求高的字段
示例:
CHAR(18) -- 用于身份证号
CHAR(32) -- 用于MD5哈希值
✅ 二、VARCHAR
:变长字符串
-
特点:变长,根据内容实际占用空间 + 1~2 字节长度信息
-
最大长度:65535 字节(受限于行大小和字符集)
-
存储方式:按实际长度存储,适合长度变化大的数据
-
适用场景:
- 字段长度变化较大,如姓名、地址、标题、评论等
- 数据经常变更,节省空间
示例:
VARCHAR(100) -- 用户名、电子邮件地址
VARCHAR(255) -- 文章标题
✅ 三、TEXT
:较长文本
-
特点:可存储最大 64KB(约 65535 字符)的文本
-
不能加默认值(MySQL 限制)
-
不能用于
ORDER BY
、GROUP BY
时作为主键索引字段的一部分(除非加前缀) -
适用场景:
- 用户评论、商品描述、日志正文、文章正文等中等长度的文本
示例:
TEXT -- 评论内容、文章描述
✅ 四、LONGTEXT
:超长文本
-
最大长度:4GB(约 4,294,967,295 字节)
-
适用场景:
- 存储大型文档,如HTML源码、大篇文章、PDF文件内容、小说内容
示例:
LONGTEXT -- 富文本、Markdown原文、文档内容
📌 选择建议总结表:
类型 | 最大长度 | 是否定长 | 是否适合索引 | 使用场景 |
---|---|---|---|---|
CHAR | 255 字节 | ✅ | ✅ | 定长数据,如国家码、哈希值 |
VARCHAR | 65535 字节* | ❌ | ✅(推荐) | 长度不固定,如姓名、标题 |
TEXT | 64KB | ❌ | ⚠️(限制多) | 评论、简介、中等长度文本 |
LONGTEXT | 4GB | ❌ | ❌ | 文章内容、大文档 |
* 实际长度受限于表的总行大小不能超过 65535 字节(不含 BLOB/TEXT)。
🔧 补充建议:
- 对于搜索字段(如标题、用户名),优先考虑
VARCHAR
+ 索引 - 对于大文本(如内容正文),使用
TEXT
或LONGTEXT
,避免全文索引失效 - 避免用
TEXT
做排序、分组、连接字段 - MySQL 的
TEXT
类型不能设置默认值,CHAR
和VARCHAR
可以