MySQL数据库varchar的限制规则说明

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MySQL数据库varchar的限制规则说明
数据库中最⼤长度是多少?其实这不是⼀个固定的数字,varchar的长度是有的。

本⽂我们就来介绍⼀下MySQL数据库中varchar的限制规则,并以⼀个实际的例
⼦对限制规则进⾏了说明,接下来就让我们⼀起来了解⼀下这部分内容。

字段的限制在字段定义的时候有以下规则:
varchar字段是将实际内容单独存储在聚簇索引之外,内容开头⽤1到2个字节表⽰实际长度(长度超过255时需要2个字节),因此最⼤长度不能超过65535。

字符类型若为gbk,每个字符最多占2个字节,最⼤长度不能超过32766;
字符类型若为utf8,每个字符最多占3个字节,最⼤长度不能超过21845。

若定义的时候超过上述限制,则varchar字段会被强⾏转为text类型,并产⽣warning。

导致实际应⽤中varchar长度限制的是⼀个⾏定义的长度。

MySQL要求⼀个⾏的定义长度不能超过65535。

若定义的表长度超过这个值,则提⽰
ERROR1118(42000):Rowsizetoolarge.Themaximumrowsizefortheusedtabletype,notcountingBLOBs,is65535.YouhavetochangesomecolumnstoTEXTorBLOBs。

举两个例说明⼀下实际长度的计算。

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的限制规则的知识就介绍到这⾥了,希望本次的介绍能够对您有所收获!。

相关文档
最新文档