MySQL小数存储时不建议使用double

今天做项目时遇到一个比较奇怪的情况,某个存储过程在数据表中取值,表中的该值(amount_second)的类型是double(13,2),存储的值为-3.22。

直接用语句读取时没有此问题,取出的值为-3.22,但是使用存储过程取出值为
在这里插入图片描述

存储过程如下:

CREATE DEFINER=`cashuser`@`%` PROCEDURE `select1`()
BEGIN
    DECLARE selectsql VARCHAR(4001);
    SET selectsql = "SELECT changedmode, amount, amount_second, occurtime INTO @changedmode_old, @amount_old, @amount_second_out, @occurtime_old FROM 表名 WHERE a= 1 AND b= 20 LIMIT 1;";
   SELECT selectsql;
    SET @runsql = selectsql;
    PREPARE runstmt FROM @runsql;
    EXECUTE runstmt;
    DEALLOCATE PREPARE runstmt;
   SELECT @changedmode_old, @amount_old, @amount_second_out;
END

这个程序是以前的同事开发的,已经上生产环境,直接改表字段的类型为DECIMAL可能会出现大的问题,想来想去,将存储过程改成下面的

CREATE DEFINER=`cashuser`@`%` PROCEDURE `select1`(OUT amount_second_out DECIMAL(13, 2))
BEGIN
    DECLARE selectsql VARCHAR(4001);
    SET selectsql = "SELECT changedmode, amount, amount_second, occurtime INTO @changedmode_old, @amount_old, @amount_second_out, @occurtime_old FROM 表名 WHERE a= 1 AND b= 20 LIMIT 1;";
   SELECT selectsql;
    SET @runsql = selectsql;
    PREPARE runstmt FROM @runsql;
    EXECUTE runstmt;
    DEALLOCATE PREPARE runstmt;
		SET amount_second_out = @amount_second_out;
   SELECT @changedmode_old, @amount_old, @amount_second_out, amount_second_out;
END

终于正常
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lcwai

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值