mysql的char,varchar,text类型的区别总结

定义

 

  • char(n),代表字符数最大是n,字符数超过n会被截断,超过n的部分丢弃。注意,n是字符,不是字节,数据占用字节数另算。
  • varchar(n),和char(n)一样,代表字符数最大是n,字符数超过n会被截断,超过n的部分丢弃。注意,n是字符,不是字节,数据占用字节数另算。
  • text(n),这个n写了也没什么用,实际用的时候多数都不写后面的n,直接用text。

 

存储空间

 

  • char(n),会占用n个字符的空间,即使字符数小于n也会按照n个字符来存,剩下的用空格补齐,但检索的时候尾部空格会被隐藏。这样会造成空间浪费。
  • varchar(n),如果字符数小于n,则只会占用字符加上1到2字节的空间,加上的几个字节用来存储数据大小。没有空间浪费。
  • text,按照字符数量来占用空间,用2字节记录存储数据大小,这2字节不占用text数据的空间。没有空间浪费。速度慢,尤其创建临时表的时候会异常悲剧。

 

比如:

char(10),保存’ab’要占用10byte,因为存的是’ab  ’,后面8个空格。

varchar(10),保存’ab’要占用3byte,数据占2个字符,另外一个字节记录数据大小。

 

速度

 

  • char,定长,基本没有碎片,索引速度极快。
  • varchar,不定长,索引速度没有char快。理论上可以添加全部索引,但是数据长度太大时索引也会截取数据前面的一部分。
  • text,不定长,速度慢,索引只能是前缀索引。

 

 

存储上限

 

  • char(n),n最大255。
  • varchar(n),n最大65535,另外,按照字符集,不能超过65525字节。这65535字节不能全用来存数据,因为有1-2字节要用来存占用长度,255字节以下用1字节存储长度,255字节以上用2字节存储长度。
  • text,上限65535字节,再多也能存,因为还有mediumtext上限2^24-3字节大概16m,longtext上限2^32-4字节大概4G。

 

 

自动去掉尾部空格

 

  • char(n),会去掉结尾的空格
  • varchar(n),不会去掉结尾空格
  • text,不会去掉结尾空格

 

比如:

char(10),保存字符串’ab ’(一个空格),存到数据库就是’ab ’(有8个空格),查询出来就是’ab’(没有空格),占10byte。

varchar(10),保存字符串’ab ’ (有一个空格),存到数据库就是’ab ’(有1个空格),查询出来也是’ab ’(一个空格),占3byte。

 

记录数据大小

 

  • varchar(n),按字符长度占用空间,但会有1-2字节来记录数据大小。
  • text,也按字符长度占用空间,但是记录在数据之外,不占用数据的空间。

 

 

其他细节

 

  • 存储定长字符串,尽量用char,索引速度极快。
  • 长度255以上字符串,只能用varchar和text。
  • 能用varchar就不要用text。
  • text不能设置默认值。
  • 和char或者varchar之类的字段不同,text中存储的内容不会和行数据存在一起,而是数据库另外找地方存储的,数据库自己记了指针。据说varchar(255+)也是这么存的。
  • text上限比较高,安全性上需要注意,在异常状态下可能会存储非常大的数据,造成很多问题,哪怕用varchar(10000)都能给截断一下呢。
  • 理论上varchar的长度最大65535字符,但能不能这么设置也得看字符集,因为mysql有规定,除了text和blob之类的类型外,单字段长度不能超过65535字节,所以,如果字符集是最基础的latin1,一个字符一个字节,那就可以定义varchar(65535),但如果设置为utf8,一个字符3个字节,那就只能定义varchar(21485)。

 

原文链接:https://blog.csdn.net/lkforce/article/details/79006838

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值