You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SuiteCRM 7.11.10添加字段遇Row size too large错误求解决方案

解决SuiteCRM 7.11.10添加字段时MySQL行大小超限的问题

你碰到的这个Row size too large错误确实是MySQL的经典限制导致的——InnoDB/MyISAM表的非BLOB/TEXT类字段总字节数不能超过65535,而SuiteCRM的自定义表(比如accounts_cstm)默认堆积了不少VARCHAR字段,新增中等长度的VARCHAR时就会触发这个上限。下面给你几个不用改代码的解决思路,以及关于版本升级的建议:

无需修改代码的可行方案

  • 调整MySQL表的行格式:如果你的MySQL版本在5.7及以上,可以把目标自定义表改成DYNAMICCOMPRESSED行格式。这两种格式会把过长的VARCHAR字段存到行外的溢出页,不再占用行内的有限空间。执行这条SQL即可(操作前记得备份表):
    ALTER TABLE accounts_cstm ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
    
    改完之后再尝试添加phone字段或者下拉框字段,基本都能成功。
  • 换用更省空间的字段类型:除了缩小字段长度到5,你还可以试试CHAR(20)这种固定长度类型(总字节数比VARCHAR(100)少,因为VARCHAR会额外存储长度标识),或者直接用TEXT类型——虽然电话用TEXT看起来有点奇怪,但它属于BLOB类字段,不会占用行内空间,能完美绕过行大小限制。
  • 清理冗余自定义字段:检查一下accounts_cstm表,看看有没有已经废弃不用的自定义VARCHAR字段,删掉它们释放行空间,之后再添加新字段就有足够的余量了。

关于升级SuiteCRM的建议

SuiteCRM 7.12及以后的版本对数据库字段设计做了不少优化,减少了不必要的固定长度字段,并且更合理地选择字段类型,这类行大小超限的问题出现频率会低很多。如果你经常碰到这类字段添加失败的情况,升级到稳定的新版本是个长远的解决方案,但升级前一定要做好全量数据备份,并且测试好现有自定义模块、工作流的兼容性。

补充:为什么下拉框始终失败?

SuiteCRM里的下拉框字段默认是VARCHAR(255),比你尝试的phone字段占用更多行空间,所以更容易触发行大小限制。用上面的行格式调整方法,应该就能解决下拉框添加失败的问题。

内容的提问来源于stack exchange,提问作者Sebastian D'Agostino

火山引擎 最新活动