主攻帝国 全栈为辅

帝国cms添加字段时Row size too large. The maximum row size for the used table type的解决方法

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

系统版本,帝国cms7.5 utf-8版本,在建立表字段的时候,有大量的字符型的字段,通常是用varchar(255)类型的,但建立比较多的时候,突然出现了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的问题。也在网上搜索了一顿,但没有找到直接的解决方案。问题的原因是在建立表的时候,帝国Cms会对应建立infoclass_表名,建立三个varchar(255)类型的字段,也就是说,当你想建立一个varchar类型的字段,帝国就以3倍的方式给你建立了对应的字段。我是这样解决的。

找到e/class/moddofun.php文件,搜索ecms_infoclass_这样的字段,然后看看附近的varchar(255),全部修改成text(0)即可。

推荐在之前就通过这种方式来操作一下,要不的话,你会发现,比如新增加了linkurl字段后,会提示出错,但这个字段已经添加到表里面了,要做的就是,在对应的表中找到这个字段。然后挨个删除,再重新建立即可。比如表名为info,则找到对应的

ecms_info,ecms_info_check,ecms_doc这几个表,挨个删除刚才新加失败的字段。然后再重新添加即可。

相信在不久的将来,当字段再多的时候,还是会出现以上问题,原因是,里面遗留的varchar字段,并未改变,随时字段的增加,还是有可能出现问题。那就要换另外一种方法了。即将infoclass_info表中的所有varchar类型改成text(0)才行。

所以,一旦预知到有很多字段,则要修改e/class/moddofun.php文件。这样以绝后患。