Char和varchar简单介绍

1. 数据长度

1) char(最大长度255个字节)

长度固定(字段存入数据长度始终等于字段长度)

2) varchar(最大长度65535个字节)

可变长度,存入数据长度为N个字节,则实际使用了N+1(255以上长度则+2)个字节的空间,多出来的1字节是用来存储数据实际长度。

  • 存入数据对比
    • 存入"ab"
      • char查询出"ab"
      • varchar查询出"ab"
    • 存入"ab "ab后面有两个空格
      • char查询出"ab"
      • varchar查询出"ab "

解析:

​ 在入库时,数据库会自动在ab后面添加两位空格,让入库的数据长度保证等于4 char(4) ,这种操作很容易理解,但是如果你去数据表里面去查这条数据,会发现表中数据并没有空格,所以可以推断出这里是逻辑追加,所以在查询数据的时候会并不会出现引擎自动添加的空格。


2. 实操(技术一定要**实操**)

1)无空格数据

先创建一张表

1
create table cv(c char(4), v varchar(4));

插入数据

1
insert into cv values("ab", "ab");

查询数据

1
select concat('(', c, ')') AS c, concat('(', v, ')') AS v from cv;

结果

image-20191012152503483

结果中char和varchar均查出来为无空格的ab

####2)有空格数据

插入数据

1
insert into cv values("ab  ", "ab  ");

查询数据

1
select concat('(', c, ')') AS c, concat('(', v, ')') AS v from cv;

结果

image-20191012152809508

结果中可以看出,char类型将数据后面的空格自动去掉了,varchar则保留了所有的空格