create table s4(
b varchar(45533) not null,
c varchar(45533) not null
)character set latin1;插入这个的时候,提示失败。原因是数据太长。也就是45533+45533>65535 ,大概是这个原因吧。
这是说明一条记录的总长度,不能超过65535个字节么?后面有一个longtext的类型,长度可以为2^32次方。这个数据类型的长度,是可以超过65535吧。这两者之间不存在矛盾么?
longtext中的内容如果超过了65535,数据库会报错么?

解决方案 »

  1.   

    所有varchar类型加起来不能超过65535
      

  2.   

    varchar不能超过65535,是因为在行首部用2个字节来存放变长字段的长度。innodb一页是16K,因为B+数的结构,每页必须保证有2行记录,所以每条记录不能超过8K。若text(包括大varchar)字段过大,会保留768字节的前缀数据和页面的偏移量,指向溢出页,其余数据都存放在溢出页中。所以varchar的65535限制不是说数据没地方存了