MySQL数据库中varchar的限制规则
MySQL数据库中varchar***长度是多少?其实这不是一个固定的数字,varchar的长度是有限制规则的。本文我们就来介绍一下MySQL数据库中varchar的限制规则,并以一个实际的例子对限制规则进行了说明,接下来就让我们一起来了解一下这部分内容。
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”了。
关于MySQL数据库中varchar的限制规则的知识就介绍到这里了,希望本次的介绍能够对您有所收获!
【编辑推荐】
相关文章
- Postgres数据库修改最大连接数
- ArcGIS Pro SDK 002 对数据文件的读取和操作
- Android JetPack~ DataBinding(数据绑定)(一) 集成与使用
- Android JetPack~ LiveData (一) 介绍与使用
- 快速傅里叶变换及其实现
- 帧、报文、报文段、分组、包、数据报的概念区别
- .Net Core中使用NEST简单操作Elasticsearch
- Elasticsearch Mapping类型修改
- Serverless Streaming:毫秒级流式大文件处理探秘
- redis georadius源码分析与性能优化
- SSE图像算法优化系列九:灵活运用SIMD指令16倍提升Sobel边缘检测的速度(4000*3000的24位图像时间由480ms降低到30ms)。
- 基于二叉树的高效IP检索格式MMDB
- Redis避坑指南:为什么要有分布式锁?
- Why GraphQL? 6个问题
- MySQL 中的事务理解
- 基于昇腾计算语言AscendCL开发AI推理应用
- 用AngleSharp & LINQPad抓取分析博客园排行榜
- 一次生产环境CPU占用高的排查
- Netty Protobuf处理粘包分析
- Redis 异步客户端选型及落地实践