char 和 varchar 作为 mysql 提供的字符串类型,它们有什么区别与相同点?
相同点
可以存储绝大部分字符
首先说说他们两个之间的相同点
为什么说是可以存储绝大部分字符呢,因为能存储的内容不止是由字段类型决定的,数据库的字符集也会影响存储的信息及比如熟知的mysql字符集utf8mb4和utf8,前者可以存储 特殊的 Unicode 编码Emoji 表情,而后者并不能存储。
不同点
1、最大长度不一样
char类型可以设置的最大长度为255,如果超过了255个字符串长度则会报错。
varchar理论上最大长度为65535个字节,但是由于不同字符集不同编码最大存储的字符数会有所不同,这里数据库和数据表都使用utf8mb4,varchar的最大值为16383,超过了这个值则会提示要求更换大数据字段。
2、存储方式不同
char不论你实际存储了多少的字符,都会占用设置的n个字符空间,比如设置sex字段长度为10存如内容为:男,实际占用的长度还是10个字符长度
需要注意的是char在存储的时候假如实际存储的字符没有达到设置的N字符空间长度,那么会在存储的时候用空格去补全,但是当我们去查询拿到对应的数据时会把多余的空格为抹去,得到的还是实际存储的字符
varchar它存储的长度并不固定,只要实际存储的长度小于创建表时设置的N长度就可以。比如设置sex字段长度为10存如内容为:男,实际存储的字符就只是男这个字符字符串所占用的长度。
3、效率
由于char它存储的长度一致,理论上char应该要比varchar效率高,但并不是绝对的,只有当空间完全填充的状态下char类型的效率才会高于varchar类型,
常用举例
char通常使用在存储的内容长度固定的情况下,比如手机号码,性别,身份证号出身年月等
varchar一般就使用长度不固定的情况,比如备注,地址等