mysql之char、varchar和text

char、varchar和text是mysql数据库中使用的三种字符串类型,简述一下三者之间的区别。

  • char(n)
    定长字符串,n表示字符数上限,超过存储上限字符会被截断。n也是存储空间的实际长度,不管实际字符串有多长,都会占用n个字符的空间,长度上限是255个字节。需要注意的是,char(n)里面的n表示的是字符数,而不是字节数,因此n的上限并不是255,以utf-8格式存储中文字符为例,每个字符占用3个字节,因此n*3应该小于255。
    优点是存取效率很高;缺点是可能存在空间资源的浪费,字符串末尾空格都会被截断(存入”12 “,读出来只有“12”),只能存储长度较小的字符串。

  • varchar(n)和text
    varchar(n)是不定长字符串,可指定长度上限n个字符(与char(n)相似,这里是字符数,不是字节数),超过会被截断,实际可以保存的最大字符串长度是n-1,因为在字符串被截断时,会留一个空间保存字符串结束的标记。varchar(n)可以指定的字符串长度上限时65535个字节,但实际情况会有1-3个字节存储字符串的长度信息,所以可以保存的字符串的最大长度为65532。
    varchar(n)里面的n并不指代存储字符串时实际占用的内存空间大小,在不超过指定长度上限的情况下,最终内存开销以实际字符串长度m+1为准。与char(n)相比,不会截字符串末尾的空格,对于同样是比较短的字符串,不会有内存资源的浪费,但是存取效率也没有char(n)那么高。当存储的字符串长度超过某个值时,超出部分的字符串不会和主表的行存储去数据放在一起,而是会被存入overflow存储区,具体这个长度限制,使用innodb引擎时,是768个字节,其他驱动会有些区别。
    text是用来存储较长字符串的结构,其存储原理与varchar()相同,效率也相似,区别在于1)text不限定最大长度;2)不能指定默认值;3)text使用外部存储去存储字符长度,不占用字符串空间,最大支持字符串长度为65535个字节

总结以下:

  • char存取速度较快,varchar和text较慢;
  • char存储定长小字符串,varchar和text存储不定长大字符串;
  • char可能会有内存浪费,varchar和text不会
  • varchar相对于text,效率相似,最大长度相似,但支持默认值,支持最大长度上限设置。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值