mysql中,char与varchar的区别

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快

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值