Yihui’s Blog

MySQL 中 varchar 和 char 有什么区别?

日期:2026-07-11
难度:简单
标签:#面试 #MySQL #数据类型

一句话答案

CHAR 是定长字符串、写入时右补空格,适合长度固定的数据;VARCHAR 按实际长度存储并带长度前缀,适合长度变化较大的文本,通常更节省空间。

面试口语版

CHAR(M) 固定占用声明长度,长度不足会补空格,适合国家码、固定长度哈希等;VARCHAR(M) 存实际内容加 1 或 2 个字节的长度信息,适合姓名、标题等变长字段。选择时不能只看“varchar 节省空间”:频繁更新且长度变化很大可能造成页内碎片或行迁移成本;字符集也影响字节数和可建索引长度。M 表示字符数上限,但 VARCHAR 的实际最大值还受行大小和字符集约束。

关键细节

  • CHAR 最大 255 个字符;VARCHAR 声明最大 65,535 字符,但受行大小限制。
  • CHAR 取出时尾部空格通常会被去掉,受 PAD_CHAR_TO_FULL_LENGTH 模式影响。
  • 不要把大段不定长正文硬塞进 VARCHAR;按需求考虑 TEXT。

面试官追问

  1. utf8mb4 下 VARCHAR(255) 占多少字节?
  2. 尾部空格比较和保存有什么差异?
  3. UUID 适合 CHAR(36) 还是 BINARY(16)?

学习清单

  • 从长度分布、字符集、更新频率和索引需求四点选择类型。
Maintained by · YihuiEdit on GitHub

Keep reading

View all posts