Drupal - 更改数据库中的十进制字段会导致错误

时间:2015-12-31 00:47:40

标签: php mysql drupal drupal-7

我需要更改模块"计算字段"实现的十进制字段的data_scale。 我直接在数据库中更改了field_data_MYFIELD(从10,2到10,4)。 我也以同样的方式修改了field_revision_MYFIELD。 第三步,我通过更改:

修改了field_config的数据

s:14:"data_precision";s:2:"10";s:10:"data_scale";s:1:"2";

s:14:"data_precision";s:2:"10";s:10:"data_scale";s:1:"4";

当我试图用drush cc all清除缓存时,我收到以下错误:

  

PHP致命错误:不支持的操作数类型   第495行的DRUPAL_SITE / modules / field / field.info.class.inc

第495行是:

// Make sure all expected field settings are present.
$field['settings'] += field_info_field_settings($field['type']);

我在index.php中启用了错误日志,并出现以下错误:

  • unserialize():第374行DRUPAL_SITE / modules / field / field.crud.inc中第13个字节的偏移330错误
  • 注意:未定义的索引:第13行的DRUPAL_SITE / sites / all / modules / computed_field / computed_field.install中的设置
  • 未定义索引:第495行DRUPAL_SITE / modules / field / field.info.class.inc中的设置
  • 致命错误:第495行DRUPAL_SITE / modules / field / field.info.class.inc中不支持的操作数类型

我做错了什么?

3 个答案:

答案 0 :(得分:0)

直接通过mysql更改设置绝不是个好主意,看看这里是从代码中做到的:https://drupal.stackexchange.com/questions/79378/changing-a-field-type-from-integer-to-decimal/151367#151367

答案 1 :(得分:0)

相反,你可以使用hook_update来改变字段。

答案 2 :(得分:0)

谢谢克莱夫。我没有粘贴整个数据......道歉。 data_precision等密钥确实位于该字符串中的数据库密钥内。我将数据内容测试到http://blog.tanist.co.uk/files/unserialize/(如建议的那样),字符串无效......你是对的。我通过改变S长度的不同值来修复它,以匹配每个S的内容。经过一些测试,问题现在得到了解决。看来直接从phpmyadmin编辑Blob数据(对于带有php代码的计算字段)并不是一个好主意,因为它添加了许多与S的长度不匹配的额外字符。再次感谢您的帮助。