【问题标题】:Laravel - Saving INT to database turns negativeLaravel - 将 INT 保存到数据库变成负数
【发布时间】:2021-11-16 15:18:51
【问题描述】:

我正在将一些数据保存到我的数据库中,但是当我保存数据时有一个字段变为负数。

["invoice_id"]=> int(20210126075173)

这是从var_dump() 获取的,是我要保存的号码。这看起来完全正常,但是当我查看数据库时,我得到了数字

-1990019803

问题是,当我在我的机器上运行代码时,它会像预期的那样工作并按应有的方式保存数字,但是当我在实际服务器上执行此操作时,它会返回该负数。我的本地数据库也是实时数据库的克隆。

“Invoice_id”是一个 varchar 字段我尝试将其更改为 INTBIGINT 但这没有区别。

【问题讨论】:

  • 试试这个 ["invoice_id"]=> (int)20210126075173
  • 这仍然给了我相同的负数...
  • 20210126075173 这不是整数,这超出了整数值的限制。你不应该用 int 转换它,你不应该将它存储在 int 列中你可以使用大整数

标签: database laravel eloquent


【解决方案1】:

您为什么要将 ["invoice_id"]=> int(20210126075173) 转换为 int,而您似乎已经在给它一个整数?

你可以试试:

["invoice_id"]=> 20210126075173

或者如果您将字符串转换为 int:

["invoice_id"]=> int() '20210126075173'

【讨论】:

    【解决方案2】:

    你可以做几件事来防止这种情况发生:

    1. 使用$table->unsignedInteger('column name');将数据库列设为UNSIGNED INTEGER

    2. 使用 if 语句 ( (int) ["invoice_id"] >= 0 ) ?? ["invoice_id"] * -1

      在插入到 db 之前检查值

    你的本地和远程服务器之间的差异问题可能与数据库服务器(mysql,postgrs,...)版本或系统区域设置有关。我以前没有见过,不知道是什么原因造成的。

    确保在将数据插入数据库之前对其进行验证,以防止出现不需要的值(这会将您带到第二个选项)

    【讨论】:

      【解决方案3】:

      为什么将invoice_id 从 var_char 字段更改为 int 字段?我觉得如果是varchar,可以加""存入数据库。

      【讨论】:

      • 谢谢!这就是我的答案! $invoice->invoice_id = "$invoice_id";解决了这个问题。
      猜你喜欢
      • 2021-07-18
      • 2020-01-15
      • 2020-06-09
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多