MySQL字段类型Verchar大小长度介绍
作者:bea
4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)
5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节
Mysql4中最大也不过是20个字节,但是Mysql5根据编码不同,存储大小也不同。
1、限制规则
字段的限制在字段定义的时候有以下规则:
a)存储限制
varchar字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535。
b)编码长度限制
字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;
字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。
若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。
c)行长度限制
导致实际应用中varchar长度限制的是一个行定义的长度。MySQL要求一个行的定义长度不能超过65535。若定义的表长度超过这个值,则提示
ERROR1118(42000):Rowsizetoolarge.Themaximumrowsizefortheusedtabletype,
notcountingBLOBs,is65535.YouhavetochangesomecolumnstoTEXTorBLOBs。
2、计算例子
举两个例说明一下实际长度的计算。
a)若一个表只有一个varchar类型,如定义为
createtablet4(cvarchar(N))charset=gbk;
则此处N的最大值为(65535-1-2)/2=32766。
减1的原因是实际行存储从第二个字节开始';
减2的原因是varchar头部的2个字节表示长度;
除2的原因是字符编码是gbk。
b)若一个表定义为
createtablet4(cint,c2char(30),c3varchar(N))charset=utf8;
则此处N的最大值为(65535-1-2-4-30*3)/3=21812
减1和减2与上例相同;
减4的原因是int类型的c占4个字节;
减30*3的原因是char(30)占用90个字节,编码是utf8。
如果被varchar超过上述的b规则,被强转成text类型,则每个字段占用定义长度为11字节,当然这已经不是“varchar”了。
有用 | 无用猜你喜欢
您可能感兴趣的文章:
- 如何提高新网站在百度的权重
- 如何查询网站流量和提高网站流量
- Google adsense申请和18个需要注意的事项
- 网站制作之怎样优化网站
- 影响百度快照更新的因素有哪些
- 浅谈百度知道推广技巧
- SEO优化策略在企业级网站中的应用
- 细说搜索引擎不收录网站页面
- SEO以及与SEO相关的各种营销公司
- httpd.ini和.htaccess的写法与配置规则
- 新建的网站生存之该如何推广
- MySQL启动不了,无法启动MySQL服务解决方法
- mysql数据库导入、备份和导出常用命令总结
- mysql当天日期函数使用小结
- sql查询优化:查询语句优化小结
- MySQL教程之error 150错误提示解决办法
- MySQL教程之六种强制修改Root密码方法
- 解决MySQL 1067错误方法
- 完美解决MySQL中文乱码问题