为什么 SUM(`column`) 返回字符串而不是整数?

问题描述 投票:0回答:2

我正在使用 Laravel,并且有一个查询使用列的

DB::raw()
SUM()
进行选择:

DB::raw("SUM(points) as game_points")

我已经安装了 mysqldn 并且 AFAIK Laravel 使用

PDO

但是

game_points
是一个字符串,无论列是什么类型。 (这是一个整数列

如果我这样做:

DB::raw("COUNT(id) as foo_bar")

foo_bar
以整数形式返回。

php mysql pdo sum sqldatatypes
2个回答
44
投票

这既不是 Laravel 也不是 PDO 问题。

根据MySQL手册

SUM()
返回精确值参数的
DECIMAL
值(
integer
DECIMAL
)。在 PHP 中表示
DECIMAL
类型的唯一方法是 string,原因有两个:

  • 它可能会溢出 PHP 的 int 类型,大于 PHP_INT_MAX。
  • 此外,如果返回的值是十进制数,由于浮点数的本质上不精确,它可能会失去精度(例如 DECIMAL(10,2) 可以准确存储 0.1,而最接近的 php 原生 float-可以存储的类型是 0.1000000000000000055511151231257827021181583404541015625 )

由于这些预防措施,值以字符串形式返回,您应该根据期望值手动转换它 - 使用标准 PHP 类型转换或使用一些专用的数学函数,例如 bcmath。


0
投票

您可以尝试使用

CONVERT(INT, game_points)

将该字符串转换为整数

根据bugs.mysql.com

sum()
返回
NEWDECIMAL
数据类型,相当于php中的
string
,而
count()
返回
integer
数据类型。

© www.soinside.com 2019 - 2024. All rights reserved.