Laravel - 将 INT 保存到数据库变为负值

Laravel - Saving INT to database turns negative

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

["invoice_id"]=> int(20210126075173)

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

-1990019803

问题是,当我 运行 我机器上的代码时,它按预期工作并保存了数字,但是当我在实际服务器上执行此操作时 returns负数。我的本地数据库也是实时数据库的克隆。

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

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

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

  1. 使用 $table->unsignedInteger('column name');

    使数据库列成为 UNSIGNED INTEGER
  2. 在使用 if 语句 ( (int) ["invoice_id"] >= 0 ) ?? ["invoice_id"] * -1

    插入数据库之前检查值

您的本地和远程服务器之间的差异问题可能与数据库服务器(mysql,postgrs,...) 版本或系统有关 locale.I 以前没有见过这个问题并且有不知道是什么原因造成的。

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

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

你可以试试:

["invoice_id"]=> 20210126075173

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

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