MySQL中字符类型有很多个,用的最多的是char和varchar类型。他们的对比如下图:
utf8中一个字符占用3字节,gbk占用2个字节,latin1占用1个字节。
char(x)保存的字符长度固定为x(x最大取值255),不足的会在右侧用空格填充(仅储存,查询出来没有空格),而超过x长度的部分会截取掉。所以表格中占用字节都是9。
varchar(x)保存的字符长度最大为x(x最大取值65535),不足的直接储存实际字符,超过x长度的也会被截取。由于使用额外的1字节储存字符长度,所以表格中是实际长度*3+1个字节。
1.char和varchar的最大长度会根据字符编码不同而变化,影响因素有3个:
- 1.字符编码。如utf8编码中,一个字符占用3字节,最大长度为21845。
- 2.储存长度。varchar要占用1到2个字节储存字符本身的长度,长度小于等于255用1个,超过用2个。
- 3.单行最大长度限制。一张表中所有字段设置的长度之和不能超过65535,如果表中两个varchar,一个长度为65530,另一个为6,建表就会报错。储存更长的可以用text和blob类型。
2.选择合适的类型使用
- 使用char:固定长度的字符串,如MD5加密后的字符串,时间戳,证件号码,或者一些很短的字符串。
- 使用varchar:列数据长短不一致,数据更新频率低(长度变化会有一些额外的操作)。
- 使用varchar的时候,长度也要注意合适,不然会造成内存空间浪费。