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 题
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。