当前位置: 首页 > 知识库问答 >
问题:

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

秦凯定
2023-03-14

我使用的是Laravel,并有一个查询,它使用列的DB::raw()SUM()进行选择:

DB::raw(“SUM(points)as game_points”)

我已经安装了mysqldn,AFAIK Laravel使用PDO

但是game_points是一个字符串,不管列是什么类型。(它是一个整数列)

另外,如果我这样做:

DB::("COUNT(id)asfoo_bar")

< code>foo_bar以整数形式返回。

共有2个答案

梁丘佑运
2023-03-14

您可以尝试使用< code>CONVERT(INT,game_points)将该字符串转换为整数

根据bugs.mysql。com,sum()返回一个NEWDECIMAL数据类型,这相当于php中的string,而count()返回一种integer类型。

欧君之
2023-03-14

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

根据MySQL手册,SUM()返回一个DECIMAL值用于精确值参数(integerDECIMAL)。在PHP中表示DECIMAL类型的唯一方法是字符串,原因有两个:

  • 它可以溢出 PHP 的 int 类型,大于 PHP_INT_MAX。
  • 此外,如果返回的值是十进制数,则由于浮点数固有的不精确性,它可能会失去精度(例如 DECIMAL(10,2) 可以准确存储 0.1,而 PHP 的本机浮点类型可以存储的最接近的东西是 0.10000000000000000055511151231257827021181583404541015625 )

由于这些预防措施,该值作为字符串返回,您应该根据预期值手动转换它——要么使用标准的PHP类型转换,要么使用一些专用的数学函数,如bcmath。

 类似资料:
  • 问题内容: 我有一个$ .ajax()请求,其dataType设置为“ json”。服务器返回的JSON具有正确的mime类型“ application / json”。但是,我的jqXHR对象中的responseText始终是字符串。我究竟做错了什么?这是应该如何工作的吗? 这是我拨打电话的方式: 所以我必须做一个才能得到一个实际的对象。这似乎没有必要,因为$ .ajax()应该根据文档自动转换

  • 问题内容: 我正在尝试读取(位于Javascript源的同一文件夹中)的内容,并使用以下代码显示它: 的内容创建于: 测试Node.js readFile() 我得到这个: 问题答案: 从文档: 如果未指定编码,则返回原始缓冲区。 这可能解释了。指定一个有效的编码,例如作为文件名之后的第二个参数。如,

  • 问题内容: 在.NET Framework 的参考中,使用type 声明请求类型。 在RFC 2616 中,声明了所有HTTP请求方法(例如POST,GET,PUT,DELETE …)。 .NET 和类中也存在类似的行为。 Java在方法上有类似的方法。 这些语言设计者为什么不考虑为这些HTTP方法实现枚举? 你有好主意吗? 问题答案: RFC 2616 链接的第一句话(添加了重点): HTTP

  • 以下endpoint以字符串形式返回用户名。 我如何构造它以返回一个json对象,该对象包含一个键,该键的值为该字符串(例如,{“user”:“joeuser”})?

  • 问题内容: 在Java中,hashcode()方法返回整数而不是long。有什么具体原因吗? 问题答案: 那么,一个良好的理由是,基于数据结构(,)使用一个数组来存储箱,并且阵列被限制为索引。 如果必须将其映射到数组索引,那么您将一无所获。

  • 我阅读了关于getInt()方法的文档: public int getInt(字符串键) 返回与给定键关联的值,如果给定键不存在所需类型的映射,则返回0。 参数: 键入字符串 返回: 一个int值 但我不知道它到底返回了什么。 的ID是在R.java中还是没有其他东西???