MySQL中关于varchar最大长度的问题[MySQL防范]
本文“MySQL中关于varchar最大长度的问题[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
被问到一个问题:MySQL中varchar最大长度是多少?这不是一个固定的数字.本文扼要阐明一下限制法则.
1、限制法则
字段的限制在字段定义的时刻有以下法则:
a) 存储限制
varchar 字段是将实际内容单独存储在聚簇索引之外,内容开首用1到2个字节表示实际长度(长度超越255时需求2个字节),因此最大长度不能超越65535. www.110hack.com
b) 编码长度限制
字符范例若为gbk,每个字符最多占2个字节,最大长度不能超越32766;
字符范例若为utf8,每个字符最多占3个字节,最大长度不能超越21845.
若定义的时刻超越上述限制,则varchar字段会被强行转为text范例,并产生warning.
c) 行长度限制
招致实际利用中varchar长度限制的是一个行定义的长度. MySQL要求一个行的定义长度不能超越65535.若定义的表长度超越这个值,则提醒
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs.
2、计算例子
举两个例阐明一下实际长度的计算.
a) 若一个表只有一个varchar范例,如定义为
create table t4(c varchar(N)) charset=gbk;
则此处N的最大值为(65535-1-2)/2= 32766.
减1的缘由是实际施存储从第二个字节开始’;
减2的缘由是varchar头部的2个字节表示长度;
除2的缘由是字符编码是gbk. www.110hack.com
b) 若一个表定义为
create table t4(c int, c2 char(30), c3 varchar(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”了.
作者 丁林.tb
以上是“MySQL中关于varchar最大长度的问题[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |