我正在使用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
以整数形式返回。
这既不是Laravel也不是PDO的问题。
根据MySQL手册,SUM()
返回精确值参数(integer
或DECIMAL
)的DECIMAL
值。在 PHP 中表示DECIMAL
类型的唯一方法是字符串,原因有两个:
- 它可以溢出 PHP 的 int 类型,大于 PHP_INT_MAX。
- 此外,如果返回的值是十进制数,则由于浮点数固有的不精确性,它可能会失去精度(例如 DECIMAL(10,2) 可以准确存储 0.1,而 PHP 的本机浮点类型可以存储的最接近的东西是 0.10000000000000000055511151231257827021181583404541015625 )
由于这些预防措施,该值以字符串形式返回,您应该根据期望值手动转换它 - 使用标准 PHP 类型转换或使用一些专用的数学函数(如 BCMATH)。
您可以
尝试使用CONVERT(INT, game_points)
将该字符串转换为整数
根据 bugs.mysql.com,sum()
返回一个NEWDECIMAL
数据类型,相当于php中的string
,而count()
返回一个integer
数据类型。