我正在使用 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 manual , SUM()
为精确值参数(integer
或 DECIMAL
)返回一个 DECIMAL
值。在 PHP 中表示 DECIMAL
类型的唯一方法是 string,原因有二:
- 它可以溢出 PHP 的 int 类型,大于 PHP_INT_MAX。
- 此外,如果返回值是十进制数,则可能会由于 inherently imprecise nature 而失去精度 float (例如 DECIMAL(10,2) 可以准确存储 0.1,而 php 的原生浮点类型可以存储的最接近的东西是 0.1000000000000000055511151231257827021181583404541015625 )
由于这些预防措施,值以字符串形式返回,您应该根据预期值手动转换它 - 使用标准 PHP 类型转换或使用一些专用数学函数,例如 bcmath。
关于php - 为什么 SUM (`column` ) 返回一个字符串而不是一个整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36056686/