我正在尝试为比特币水龙头创建广告平台,因此使用MySQL作为数据库。我在问题中提到比特币是有原因的,因为我认为我的问题与它有些联系。比特币考虑小数点后十八位小数。因此,来自某人的付款可以是0.01234567 BTC,这通常不会发生在正常的货币交易中。现在,在我的SQL语句中,我正在尝试检查广告客户是否已支付其广告空间的确切金额,从而更新订单以便成功。以下是我正在使用的声明......
UPDATE order_table
SET status = 'success'
WHERE orderid = $orderid
AND amount <= $amount
金额字段已定义为DOUBLE。现在,当金额值为0.01 BTC时,当$ amount低于该金额时,订单不应成功。但是,当用户支付0.0099 BTC时,它会更新为成功!我已阅读以下解决方案,但它正在处理FLOAT ......
MySQL "greater than" condition sometimes returns row with equal value
我想知道同样的逻辑是否也适用于DOUBLE,我可以盲目地将DOUBLE数据类型转换为DECIMAL以解决问题吗?
修改:感谢评论中的Best data type to store money values in MySQL链接。我想知道,如果我可以使用比特币的Satoshi面额来解决问题。在这种情况下,查询将如下...
UPDATE order_table
SET status = 'success'
WHERE orderid = $orderid
AND amount*100000000 <= $amount_in_satoshi