首先,char 类型和 varchar 类型都是存储字符或字符串的字段类型。
1.区别:
char 存储的列是固定长度的,比如 char(5) 的列就是固定五个字符,如果插入的内容少于 5 个字符,则用空格填充。
而 varchar 存储的列不固定长度,varchar(5) 表示最多某行一列的值占 五个字符。
2.细节补充:
一、虽然 char 当插入少于固定长度时,会补充空格。但在查询时,mysql 会自动 trim() 结果,所以查询时是 trim 后的结果。
比如 insert "a " (a + 空格),但插入后查询出来仍然是 "a"
二、char() 的列虽是固定字符长度,但字节长度却不固定。
比如:
create table table1(a char(5)) charset=utf8 engine = innoDB;
insert into table1 values('12345'); // 五个字节
insert into table1 values('举头望明月'); // 十五个字节
select length(a) from table1 limit 10; // 5 15
create table table2(a char(5)) charset=gbk engine = innoDB;
insert into table2 values('12345'); // 五个字节
insert into table2 values('举头望明月'); // 十个字节
select length(a) from table2 limit 10; // 5 10
三、varchar 超出定义的长度时,再插入,结果怎样?
如果当前 mysql 服务端开启了严格模式(strict_mode),则插入会失败。
如果当前 mysql 没有开启严格模式,则会将插入部分超出长度的部分(左起)舍弃掉,只存储定义的长度的部分。