数据库字段长度固定,在何情况下选择使用char而非varchar?
- 内容介绍
- 文章标签
- 相关推荐
在数据库设计中,选择 CHAR 还是 VARCHAR 是一个常见且棘手的问题。许多开发者因为以下痛点而犹豫不决:
- Oracle 中难以找到使用 CHAR 的充足理由;
- CHAR 存在尾部空格填充,导致查询结果需要手动去除空格;
- 对字段长度的误解,例如 VARCHAR 与 VARCHAR 在存储空间上的差异并不直观;
- 担心行迁移碎片与 I/O 负担;说起来,
- 对性能与空间利用率的权衡缺乏经验。
1️⃣ 何时选择 CHAR?
1.1 固定长度的数据字段
典型场景:
- 身份证号码、邮政编码、国家代码、性别、状态码等。
- 这些字段值的长度是已知且不变的,使用 CHAR 可以保证每行占用相同的字节数。
优点:
- 从查询速度快来看。固定长度让数据库可以直接定位数据,无需计算实际长度。
- 避免行迁移碎片:因为每行占用相同空间,更新时不会触发大量 I/O。
缺点:
- 至于空间浪费。若实际数据短于定义长度,多余字节会被空格填充。其实,
- 从尾部空格问题来看。MySQL PADSPACE 校对会自动去掉尾部空格,但 Oracle 不会,需要在应用层处理。
在数据库设计中,选择 CHAR 还是 VARCHAR 是一个常见且棘手的问题。许多开发者因为以下痛点而犹豫不决:
- Oracle 中难以找到使用 CHAR 的充足理由;
- CHAR 存在尾部空格填充,导致查询结果需要手动去除空格;
- 对字段长度的误解,例如 VARCHAR 与 VARCHAR 在存储空间上的差异并不直观;
- 担心行迁移碎片与 I/O 负担;说起来,
- 对性能与空间利用率的权衡缺乏经验。
1️⃣ 何时选择 CHAR?
1.1 固定长度的数据字段
典型场景:
- 身份证号码、邮政编码、国家代码、性别、状态码等。
- 这些字段值的长度是已知且不变的,使用 CHAR 可以保证每行占用相同的字节数。
优点:
- 从查询速度快来看。固定长度让数据库可以直接定位数据,无需计算实际长度。
- 避免行迁移碎片:因为每行占用相同空间,更新时不会触发大量 I/O。
缺点:
- 至于空间浪费。若实际数据短于定义长度,多余字节会被空格填充。其实,
- 从尾部空格问题来看。MySQL PADSPACE 校对会自动去掉尾部空格,但 Oracle 不会,需要在应用层处理。

