前言
学习过MySQL数据库的友友们肯定对char和varchar
这两个字符串数据类型并不陌生,那么这两个类型的区别、细节和使用场景
你清楚吗?
char与varchar对比
- char(size),
固定长度
字符串,最大==255字符==。- varchar(size),
可变长度
字符串,最大==65535字节==(注意这里是字节,在不同的编码规则中字符占用的字节是不相同的),若没定义表的编码则默认为utf8
【utf8编码最大21844字符;gdk编码最大为32766字符】- (注意字符而非字节)
- char分配固定字符,char(4)占用四个字符,存入一个字符,也会在内存中占用四个字符空间。
- varchar
按实际使用分配空间
,还需使用1-3个字节来记录存放内容长度,总占用 = L(实际数据大小)+(1-3)个字节
.
代码样例
CREATE TABLE t4(
`name` CHAR(255));
#创建一个表t4,定义name的长度为255字符
INSERT INTO t4 VALUES('ABCD');
INSERT INTO t4 VALUES('我是你D');
#给表中添加英文、中文都可以
CREATE TABLE t5(
`name` VARCHAR(32766)) CHARSET gbk;
#定义编码为gdk,最大长度为32766字符,因为gbk中文占2个字节,英文占1个字节
CREATE TABLE t6(
`name` VARCHAR(21844));
#定义编码为默认utf8,最大长度为21844字符,因为utf-8中文占3个字节,英文占1个字节
char与varchar的使用细节
- char(4),这个4表示字符数,非字节数,无论中文还是字母都是四个(占用字符空间固定)。
- varchar(4),这个4也表示字符数,但是这里存放的字母或者中文是
按照定义表时的编码来计算
(占用字符空间不固定)。
char和varchar的使用情景
数据定长,推荐char
。例如md5密码(固定32为)、邮编、手机号、身份证号等。2.
长度不确定,使用varchar
。例如留言、文章等。