问题描述
排查数据库表字段时发现数据库金额字段用的是varchar,通过以下语句调整修改该字段为decimal时:
ALTER TABLE `table_name`
MODIFY COLUMN `credit_quota` decimal(24, 6) NULL DEFAULT NULL COMMENT '授信额度' after `credit_currency`;
报错如下:
1366 - Incorrect DECIMAL value: ‘0’ for column ‘’ at row -1
解决方案
根据报错信息翻译是:错误的DECIMAL值在某一个行
应该是有些数据存储是varchar字符串存在"0",无法转换位decimal的数值类型。
查询是否有这种数据:
select * from table_name where credit_quota = '0' or credit_quota = '';
解决办法:
把为字符串0、空字符串’’ 的数据清除或更改为null:
update table_name set credit_quota = null where credit_quota = '0' or credit_quota = '';
修改完成后,重新调整字段:
ALTER TABLE `table_name`
MODIFY COLUMN `credit_quota` decimal(24, 6) NULL DEFAULT NULL COMMENT '授信额度' after `credit_currency`;
执行成功,修改完成。