varchar与char的区别

1 定长 VS 变长
char表示定长,长度固定,varchar表示变长,即长度可变

当插入数据的长度超过定义的长度时,如果数据库是严格模式,则会拒绝插入并提示错误信息,如果是宽松模式,则会截取然后插入。如果插入的字符串长度小于定义长度时如char(10),表示存储的是10个字符,无论你插入多少都是10个,如果少于10个,则用空格填满。而varchar(10),小于10个的话,则插入多少个字符就存多少。

varchar如何知道所存储字符串的长度呢?实际上,对于varchar字段来说,需要使用一个(如果字符串长度小于255)或两个字节(长度大于255)来存储字符串的长度。

2 存储的容量不同
对于char来说,最多能存放的字符个数255,和编码无关。
而varchar最多能存放65532个字符
varchar的最大有效长度由最大行大小和使用的字符集确定。
why 65532? 在varchar存字符串的时候,第一个字节是空的,不存任何数据,然后还需要两个字节来存放字符串的长度。所以有效长度就是65535-1-2 = 65532.
Latin1 一个字符占一个字节,最多能存放65532个字符
GBK 一个字符占两个字节,最多能存32766个字符
UTF8 一个字符占三个字节,最多能存21844个字符

注意,char和varchar后面的长度表示的是字符的个数,而不是字节数。
两相比较,char的效率高,没有碎片,尤其更新比较频繁的时候,方便数据文件指针的操作。但不够灵活

扩展
若一个表定义为create table t1(c int, c2 char(30), c3 varchar(N)) charset=utf8;问N的最大值为多少?
int 占 4个字节
char 占 30 *3 个字节
则N = ((65535-1-2)-4-30*3)/3

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值