char 与 varchar 区别

Alexer 发布于 阅读:11 速查

CHAR 是定长,VARCHAR 是变长,这是两者唯一的根本区别。

CHAR(n) 不管实际存几个字符,都固定占用 n 个字符的位置,长度不够时会在末尾用空格补齐;在检索取值时,MySQL 会把尾部空格去掉。n 最大为 255。适合长度基本固定的字段,比如手机号、省份编码、MD5 值。

VARCHAR(n) 只占用实际字符数,再加 1 到 2 字节的长度前缀,用来记录实际长度;当长度不超过 255 字节时用 1 字节,超过则用 2 字节。这里的 n 是最大字符数,不是字节数。理论上限 65535 字节,实际还受单行大小限制。适合长度差别很大的字段,比如昵称、地址、标题。

建表时的选择原则是:长度固定就用 CHAR,其余一律用 VARCHAR,不要为了方便而全表使用 CHAR。

CREATE TABLE user (
  id INT PRIMARY KEY AUTO_INCREMENT,
  phone CHAR(11) NOT NULL,        -- 固定 11 位,用 CHAR
  nickname VARCHAR(30) NOT NULL,  -- 长度不定,用 VARCHAR
  intro VARCHAR(200) DEFAULT ''   -- 长短差别大,用 VARCHAR
);

有一点需要注意:VARCHAR 会保留末尾的空格,CHAR 不会。

语法基础 MySQL 数据库基础