mariadb - SuiteCRM 中保存字段的问题:行大小太大
问题描述
我在 SuiteCRM 版本 7.11.10(Sugar 版本 6.5.25)中遇到问题。
我正在尝试电话领域。当我将字段大小设置为 255、100 或 50 时失败。但是,如果我输入像 5 这样的尺寸,它会起作用。
对于错误,sugarcrm.log 的输出如下:
Fri Feb 28 10:09:52 2020 [41][33f90d60-b3c5-a268-7484-5e54fc96488f][FATAL] Mysqli_query failed.
Fri Feb 28 10:09:52 2020 [41][33f90d60-b3c5-a268-7484-5e54fc96488f][FATAL] Cannot create column Query Failed: ALTER TABLE accounts_cstm add COLUMN phone_c varchar(100) NULL : MySQL error 1118: 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
Fri Feb 28 10:09:52 2020 [41][33f90d60-b3c5-a268-7484-5e54fc96488f][FATAL] Exception handling in /opt/suitecrm/include/MVC/Controller/SugarController.php:400
Fri Feb 28 10:09:52 2020 [41][33f90d60-b3c5-a268-7484-5e54fc96488f][FATAL] Exception in Controller: Database failure. Please refer to suitecrm.log for details.
Fri Feb 28 10:09:52 2020 [41][33f90d60-b3c5-a268-7484-5e54fc96488f][FATAL] backtrace:
#0 /opt/suitecrm/include/database/DBManager.php(353): sugar_die('Database failur...')
#1 /opt/suitecrm/include/database/DBManager.php(328): DBManager->registerError('Cannot create c...', 'Cannot create c...', true)
#2 /opt/suitecrm/include/database/MysqliManager.php(179): DBManager->checkError('Cannot create c...', true)
#3 /opt/suitecrm/modules/DynamicFields/DynamicField.php(657): MysqliManager->query('ALTER TABLE acc...', true, 'Cannot create c...')
#4 /opt/suitecrm/modules/DynamicFields/templates/Fields/TemplateField.php(594): DynamicField->addFieldObject(Object(TemplatePhone))
#5 /opt/suitecrm/modules/ModuleBuilder/controller.php(399): TemplateField->save(Object(DynamicField))
#6 /opt/suitecrm/include/MVC/Controller/SugarController.php(525): ModuleBuilderController->action_SaveField()
#7 /opt/suitecrm/include/MVC/Controller/SugarController.php(494): SugarController->do_action()
#8 /opt/suitecrm/include/MVC/Controller/SugarController.php(468): SugarController->handle_action()
#9 /opt/suitecrm/modules/ModuleBuilder/controller.php(101): SugarController->process()
#10 /opt/suitecrm/include/MVC/Controller/SugarController.php(373): ModuleBuilderController->process()
#11 /opt/suitecrm/include/MVC/SugarApplication.php(113): SugarController->execute()
#12 /opt/suitecrm/index.php(52): SugarApplication->execute()
#13 {main}
我知道SuiteCRM正在保存超过最大行大小 65535 的行,可能是因为它使用了很多具有固定大小的VARCHAR列的列。当它添加最后一列时,除非您减小大小,否则它不适合。由于这篇文章,我试图减小尺寸。
数据库似乎在告诉我解决方案。将一些VARCHAR列更改为TEXT或BLOB。
我尝试添加较小的字段,如文本或整数字段,没有问题。不幸的是,例如,减小字段大小不适用于下拉菜单。添加下拉菜单总是失败。因此,SuiteCRM 列看起来确实太大,并且没有足够的大小来容纳额外的数据。
有没有办法更改配置以避免任何代码更改?我需要升级 SuiteCRM 版本吗?
解决方案
您将需要手动更新所有自定义字段以仅使用所需的大小。
默认情况下,文本字段(varchars)默认为 255,加起来很快。
遍历所有字段并将它们设置为正确的大小,这是腾出空间作为硬限制的唯一方法。
或者,您可以使用主表(而不是 _cstm 表)通过代码添加字段。此示例将roof_type 字段添加到机会表。
$dictionary['Opportunity']['fields']['roof_type'] = array(
'name' => 'roof_type',
'vname' => 'LBL_ROOF_TYPE',
'type' => 'varchar',
'len' => '255',
);
推荐阅读
- amazon-web-services - 云铸造 API [ 组织和空间 ]
- c# - SQL 实体框架通过包含列选项的继承建立索引
- postgresql - Postgres pgAdmin 一次重命名多个列
- python - 在列表列表中查找重叠列表
- docker - 重新创建修改后的 Docker 映像
- javascript - 为什么我会收到一条错误消息,指出 onAuth 不是函数?
- python - 将 str 日期(来自数据库)与 QDateTimeEdit 值进行比较
- java - 在比较器中使用变量
传递给 PriorityQueue - ruby - 如何让我的 cli 应用程序继续使用下一个方法?
- google-chrome - 无法在 initializeCastApi 读取未定义的属性“SessionRequest”