MYSQL中char、varchar的区别

1、char(n)类型
char类型时定长的类型,即当定义的是char(10),输入的是"abc"这三个字符时,它们占的空间一样是10个字节,包括7个空字节。当输入的字符长度超过指定的数时,char会截取超出的字符。而且,当存储char值时,MySQL是自动删除输入字符串末尾的空格
char是适合存储很短的、一般固定长度的字符串。例如,char非常适合存储密码的MD5值,因为这是一个定长的值。对于非常短的列,char比varchar在存储空间上也更有效率。

2、varchar(n)类型
varchar(n)类型用于存储可变长的,长度为n个字节的可变长度且非Unicode的字符数据。n必须是介于1和8000之间的数值,存储大小为输入数据的字节的实际长度+1/2. 比如varchar(10), 然后输入abc三个字符,那么实际存储大小为3个字节。除此之外,varchar还需要使用1或2个额外字节记录字符串的长度,如果列的最大长度小于等于255字节(是定义的最长长度,不是实际长度),则使用1个字节表示长度,否则使用2个字节来表示。

所以,从空间上考虑,varchar较合适;从效率上考虑,用char合适。二者之间需要权衡。

二者转换成java实体类中的String

我们知道这两者都可以转成String,但是我们需要注意其中对空格的不同处理方式。我们用mysql和mybatis框架进行实践的结果如下:

假设字段name为char(10), 如果此字段为null,则实体类name字段也为null;如果为空字符串,则实体类name字段就是空字符串,假设网数据库中存的时候,如果实体类中的是空格字符串(n个),mysql数据库都会将其变成空字符串,因为MySQL是自动删除输入字符串末尾的空格。也就是如果实体类中字段值是 " j k “,则最终存进数据库中的是 " j k”(k后没空格)。

而假设字段name为varchar(10),和char(10)不同的一点就是mysql不会将varchar类型的字段值中的任何空格去掉。也就是如果实体类中的是空格字符串(n个),mysql数据库就会存进去n个空格;如果实体类中字段值是 " j k " ,则最终存进数据库中的就是 " j k "(k后有空格)。

还要注意不同数据库对char和carchar中末尾带空格的处理情况不一样,需要进行实践测试。

比如oracle和informix中,varchar类型就是按照实际输入的字符串进行保存。即末尾有几个空格就保存几个(在范围限制之内,超出的去掉);而char类型会自动使用空格进行补全,即如果char(8)填写了4位有效字符,informix会在后面的加入四个空格进行补全保存,而mysql不会使用空格进行补全,反而还会将末尾空格去掉,但char最终所占字节都是固定不变的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值