I'm using a custom decimal field in a custom product type in Drupal commerce. It has a precision of 10 and a scale of 2 (2 digits to the right of the decimal place).
I have a client with a large number of products that use this field, but their specification has now changed to require a decimal to 3dp.
By default Drupal "locks" the field to avoid data loss:
Because the field already has data, some settings can no longer be changed.
I took to editing the database, and it seems to have worked fine. I did three things:
Changed the structure type of
field_THIS_FIELD_value
field in thedrupal_field_data_THIS_FIELD
table fromdecimal(10,2)
todecimal(11,3)
Repeated the same for the field revision table
I downloaded the BLOB from table 'drupal_field_config' for
field_THIS_FIELD
and altered{s:9:"precision";s:2:"10";s:5:"scale";s:1:"2"
to{s:9:"precision";s:2:"11";s:5:"scale";s:1:"3"
I cleared cache and existing data now has an extra 0 after the decimal place, and when I alter the data it stores it to 3 decimal places.
So it seems to work fine. But am I missing anything? Is there anywhere else where field data is changed that I might need to change?
Does the system integrity remain intact? I think I've done what's necessary but don't want to inadvertently break something else or cause any weakness in the system.
drupal_field_config_instance
matched the existing one. Anything else?