首页 > 解决方案 > 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列更改为TEXTBLOB

我尝试添加较小的字段,如文本或整数字段,没有问题。不幸的是,例如,减小字段大小不适用于下拉菜单。添加下拉菜单总是失败。因此,SuiteCRM 列看起来确实太大,并且没有足够的大小来容纳额外的数据。

有没有办法更改配置以避免任何代码更改?我需要升级 SuiteCRM 版本吗?

标签: mariadbsizesuitecrm

解决方案


您将需要手动更新所有自定义字段以仅使用所需的大小。

默认情况下,文本字段(varchars)默认为 255,加起来很快。

遍历所有字段并将它们设置为正确的大小,这是腾出空间作为硬限制的唯一方法。

或者,您可以使用主表(而不是 _cstm 表)通过代码添加字段。此示例将roof_type 字段添加到机会表。

$dictionary['Opportunity']['fields']['roof_type'] = array(
'name' => 'roof_type',
'vname' => 'LBL_ROOF_TYPE',
'type' => 'varchar',
'len' => '255',
);

推荐阅读