修改mysql的时候常见到的一个问题
1.场景
ALTER TABLE `tb_salary`
MODIFY COLUMN `salary` decimal(20, 2) NULL DEFAULT NULL COMMENT '收入' AFTER `name`;
修改数据库某字段的数据类型从varchar到decimal时,执行完以上sql出现报错如1366 - incorrect Decimal value :'0' for column '' at row - 1
2.分析
报错信息用百度翻译:1366-第1行的列“”的十进制值“0”不正确
。可能原因是varchar字符串存在"0",无法转换位decimal的数值类型。
3.解决
把为字符串0、空字符串’'的数据清除或更改为null
,步骤如下:
-- 1查询异常数据
select id, salary from tb_salary where salary = '0' or salary = '';
-- 2.将对应数据置为null
update tb_salary set salary = NULL where salary = '0' or salary = '';
-- 3.重新执行sql
ALTER TABLE `tb_salary`
MODIFY COLUMN `salary` decimal(20, 2) NULL DEFAULT NULL COMMENT '收入' AFTER `name`;
最后修改成功。