首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在运行查询时更改数据类型(而不是在PHP中)

如何在运行查询时更改数据类型(而不是在PHP中)
EN

Stack Overflow用户
提问于 2015-05-05 23:30:55
回答 1查看 76关注 0票数 2

解释

当对MySQL中的小数进行精确计算时,它将字符串作为浮点数处理,而不是固定的--例如,如果我们在数据库中有下面的列(DECIMAL(43,20)类型)

代码语言:javascript
代码运行次数:0
运行
复制
+--------------------------+
|         amount           |
+--------------------------+
|  0.20000000000000000000  |
+--------------------------+

运行以下PHP代码

代码语言:javascript
代码运行次数:0
运行
复制
$amount_to_add = "0.1";
$stmt = $dbh->prepare("UPDATE table SET amount = amount + :amount");
$stmt->bindValue("amount", $amount_to_add);
$stmt->execute();

将导致以下情况:

代码语言:javascript
代码运行次数:0
运行
复制
+--------------------------+
|         amount           |
+--------------------------+
|  0.30000000000000004000  |
+--------------------------+

注意附加的0.00000000000000004000

因为$amount_to_add是字符串

由于我需要使用BC数学函数,它的输出是始终字符串

And i can't convert it to double/float inside PHP because it will lose precision and decimal points

问题

我应该如何将其传递给MySQL,以将其视为十进制(固定)而不是字符串(浮点),而后者不需要在PHP中更改字符串类型?

是否可以在运行查询时声明数据类型?因此,它在MySQL中将字符串更改为十进制。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-05 23:48:10

代码语言:javascript
代码运行次数:0
运行
复制
UPDATE table SET amount = amount + CAST(:amount AS DECIMAL(X, Y))
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30064941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档