char(size)
size是指定字符个数,mysql中的char与java中的char(单个字符)不一样,mysql中的char是一个字符串,可以用size来指定字符个数,范围是0-255,也就是char类型的字符串最多可以存放255个字符(不区分汉字还是字母)并且char是定长字符串,什么是定长字符串呢?就是你size指定的大小是多少,无论你实际存放了多少个字符,系统都会分配size*编码格式的单个字符所占的最大字节数,解释:比如size设置为10,编码格式是utf8,实际存放了1个字符,那么所占的空间和你存放的实际字符个数无关,所占的字节数是10*3,这个3就是utf8编码下,汉字是单个字符中所占字节数最大的,占3个字节,所以就是10*3 = 30个字节;
varchar(size)
size也是用来指定字符个数,范围根据使用的不同编码而不同,并且varchar是变长字符串,和char的定长刚好相反,变长就是占用的储存空间根据实际储存的子字符串来改变,具体来说就是:
比如编码是utf8,那么实际可以指定的长度是65532(2^16 -1 -3)/3 = 21844
为什么呢,本来因该是65535(2^16-1),但是默认需要3个字节来储存字符串长度信息,所以可以使用的要减去3,如果指定为ascii编码,那么就可以最多储存65532个字符
char和varchar的使用场景和利弊
char主要用在事先就知道字符的长度的地方,比如手机号
char的查询速度比varchar快