MySQL字段类型VARCHAR

varchar(n),n表示什么
  • MySQL5.0.3之前varchar(n)这里的n表示字节数
  • MySQL5.0.3之后varchar(n)这里的n表示字符数,比如varchar(200),不管是英文还是中文都可以存放200个
VARCHAR字段限制原因

字段的限制在字段定义的时候有以下规则:

  • a) 存储限制
    varchar字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535。
  • b) 编码长度限制
    字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;
    字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。
    对于英文比较多的论坛 ,使用GBK则每个字符占用2个字节,而使用UTF-8英文却只占一个字节。
    若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。
  • c) 行长度限制
    导致实际应用中varchar长度限制的是一个行定义的长度。
    MySQL要求一个行的定义长度不能超过65535。
    若定义的表长度超过这个值,则提示“ERROR 1118 (42000): Row size too large. ”
举两个例说明一下实际长度的计算。
  • a) 若一个表只有一个varchar类型,如定义为 create table t4(c varchar(N)) charset=gbk;
    则此处N的最大值为(65535-1-2)/2= 32766。
    减1的原因是实际行存储从第二个字节开始;
    减2的原因是varchar头部的2个字节表示长度;
    除2的原因是字符编码是gbk。

  • b) 若一个表定义为 create table t4(c int, c2 char(30), c3 varchar(N)) charset=utf8;
    则此处N的最大值为 (65535-1-2-4-303)/3=21812
    减1和减2与上例相同;
    减4的原因是int类型的c占4个字节;
    减30
    3的原因是char(30)占用90个字节,编码是utf8。
    如果被varchar超过上述的b规则,被强转成text类型,则每个字段占用定义长度为11字节,即字段不再是“varchar”。

转载于:https://www.cnblogs.com/one-villager/p/8554192.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值