mysql中char和varchar的区别

1,658 阅读2分钟

charvarchar 作为 mysql 提供的字符串类型,它们有什么区别与相同点?

相同点

可以存储绝大部分字符

首先说说他们两个之间的相同点
为什么说是可以存储绝大部分字符呢,因为能存储的内容不止是由字段类型决定的,数据库的字符集也会影响存储的信息

及比如熟知的mysql字符集utf8mb4utf8,前者可以存储 特殊的 Unicode 编码Emoji 表情,而后者并不能存储。

不同点

1、最大长度不一样

char类型可以设置的最大长度为255,如果超过了255个字符串长度则会报错。

image.png

varchar理论上最大长度为65535个字节,但是由于不同字符集不同编码最大存储的字符数会有所不同,这里数据库和数据表都使用utf8mb4varchar的最大值为16383,超过了这个值则会提示要求更换大数据字段。

image.png

2、存储方式不同

char不论你实际存储了多少的字符,都会占用设置的n个字符空间,比如设置sex字段长度为10存如内容为:,实际占用的长度还是10个字符长度

需要注意的是char在存储的时候假如实际存储的字符没有达到设置的N字符空间长度,那么会在存储的时候用空格去补全,但是当我们去查询拿到对应的数据时会把多余的空格为抹去,得到的还是实际存储的字符

varchar它存储的长度并不固定,只要实际存储的长度小于创建表时设置的N长度就可以。比如设置sex字段长度为10存如内容为:,实际存储的字符就只是这个字符字符串所占用的长度。

3、效率

由于char它存储的长度一致,理论上char应该要比varchar效率高,但并不是绝对的,只有当空间完全填充的状态下char类型的效率才会高于varchar类型,

常用举例

char通常使用在存储的内容长度固定的情况下,比如手机号码,性别,身份证号出身年月等

varchar一般就使用长度不固定的情况,比如备注,地址等