帝国cms添加字段时Row size too large. The maximum row size for the used table type的解决方法
系统版本,帝国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文件。这样以绝后患。