1. 数据长度
1) char(最大长度255个字节
)
长度固定(字段存入数据长度始终等于字段长度)
2) varchar(最大长度65535个字节
)
可变长度,存入数据长度为N个字节,则实际使用了N+1(255以上长度则+2)个字节的空间,多出来的1字节是用来存储数据实际长度。
- 存入数据对比
- 存入
"ab"
- char查询出
"ab"
- varchar查询出
"ab"
- char查询出
- 存入
"ab "
,ab
后面有两个空格- char查询出
"ab"
- varchar查询出
"ab "
- char查询出
- 存入
解析:
在入库时,数据库会自动在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; |
结果
结果中char和varchar均查出来为无空格的ab
####2)有空格数据
插入数据
1 | insert into cv values("ab ", "ab "); |
查询数据
1 | select concat('(', c, ')') AS c, concat('(', v, ')') AS v from cv; |
结果
结果中可以看出,char类型将数据后面的空格自动去掉了,varchar则保留了所有的空格