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

标签 php mysql pdo

我正在使用 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() 为精确值参数(integerDECIMAL)返回一个 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/

相关文章:

php - 写入多维数组的位置

php - 使用 PHP 获取 Google Analytics 中的特定页面浏览量

javascript - 我们如何禁用输入类型 ="date"中的 dd-mm-yyyy 字段,以便仅接受选定的日期

mysql - "Instead of"mysql中的触发器

mysql - INNER JOIN 不返回任何行

PHP 行为怪异

php - 从 curl POST 响应解析 XML

php - Iframe 从父级获取/发布数据

php - PDO 事务锁?

php - PDO MySQL where 条件 if null 或 equal