mysql增加字段时出现如下报错

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


原因:

1、限制规则

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


a)存储限制

varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用12个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535


b)编码长度限制

字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;

字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845

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


c)行长度限制

导致实际应用中varchar长度限制的是一个行定义的长度。 MySQL要求一个行的定义长度不能超过65535

文章转载至http://dinglin.iteye.com/blog/914276