Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

CHAR 和 VARCHAR 怎样选?

查看完整题解

参考回答

直接回答

CHAR 用于固定字符长度的值,VARCHAR 按实际长度存放并附带长度信息。选型主要看值的长度分布和尾空格语义,实际占用还受字符集和 InnoDB 行格式影响。

讲清原理

MySQL 读取 CHAR 时通常去掉尾部填充空格,VARCHAR 保留输入的尾空格。字符串比较是否忽略尾空格还要看排序规则,这与读出来几个字符是两回事。

例子与易错点

国家代码这类长度固定的值适合评估 CHAR,长度变化明显的名称通常用 VARCHAR。遇到尾空格导致的唯一性问题,直接用目标排序规则做对照测试。

下面使用当前默认 SQL 模式比较读取后的长度。

CREATE TABLE str_demo (fixed CHAR(5), variable VARCHAR(5));
INSERT INTO str_demo VALUES ('ab ', 'ab ');
SELECT CHAR_LENGTH(fixed), CHAR_LENGTH(variable) FROM str_demo;

相关题 · 第 38 题、第 77 题

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。