如何在MySQL数据库中精确更新DECIMAL类型数值
解决MySQL DECIMAL列更新时精度异常问题
问题原因
你用字符串形式的数值(比如'4444.8888')更新DECIMAL(12,6)列时,MySQL会先把字符串转换为浮点类型(如DOUBLE),再转成DECIMAL。但浮点类型本身存在精度限制,转换过程中会丢失精度,导致最后两位出现不确定的随机值。
解决方案
有三种可靠的解决方式:
- 直接使用数值字面量:去掉数值的引号,让MySQL直接按DECIMAL类型处理,避免浮点转换环节:
UPDATE `table` SET `balance` = 4444.8888 WHERE `token_address` = 'abc123' - 显式转换字符串为DECIMAL:用
CAST函数强制指定转换类型,确保精度:UPDATE `table` SET `balance` = CAST('4444.8888' AS DECIMAL(12,6)) WHERE `token_address` = 'abc123' - 补全小数点后六位:如果必须用字符串,手动补全到六位小数,让转换时不会产生精度偏差:
UPDATE `table` SET `balance` = '4444.888800' WHERE `token_address` = 'abc123'
内容的提问来源于stack exchange,提问作者user20596073
相关产品推荐
相关产品推荐

