MySQL 中 varchar 和 char 有什么区别?

675 阅读1分钟

核心区别

CHAR和VARCHAR是MySQL中两种主要的字符串类型,它们最本质的区别在于:

  • CHAR是固定长度的字符串类型
  • VARCHAR是可变长度的字符串类型

详细对比

特性CHARVARCHAR
存储方式固定长度,不足部分用空格填充可变长度,按实际内容存储
存储空间始终占用定义的长度空间只占用实际需要的空间+1-2字节长度信息
性能读取略快(无需计算长度)需要额外处理长度信息
适用场景长度固定或很短的字符串(如MD5、UUID)长度变化或较长的字符串

补充说明

  1. CHAR的填充机制:当存储的字符串短于定义长度时,MySQL会自动用空格填充;检索时这些填充的空格会被移除(InnoDB引擎会忽略末尾空格)

  2. VARCHAR的长度信息

    • 字符串≤255字符:使用1字节存储长度
    • 字符串>255字符:使用2字节存储长度
  3. 实际应用建议

    • 对于固定长度的数据(如国家代码、MD5哈希等),使用CHAR更合适
    • 对于大多数变长字符串,使用VARCHAR更节省空间
    • 现代MySQL版本中,两者的性能差异已经很小,空间效率通常更重要
  4. 存储引擎差异

    • MyISAM引擎:固定长度的行(使用CHAR)性能更好
    • InnoDB引擎:可变长度行(VARCHAR)通常更高效