【问题标题】:Problem saving fields in SuiteCRM: Row size too largeSuiteCRM 中保存字段的问题:行大小太大
【发布时间】:2020-02-28 10:36:03
【问题描述】:

我在 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 列的列。当它添加最后一列时,除非您减小大小,否则它不适合。感谢post,我试图减小尺寸。

数据库似乎在告诉我解决方案。将一些 VARCHAR 列更改为 TEXTBLOB

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

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

【问题讨论】:

标签: mariadb size suitecrm


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多