在将答案标记为重复之前,我想说我已经去过这个问答:不正确的整数(2147483647)入到MySQL中?而我的问题则相反。MySQL 错误地返回了一个整数。正如之前的问题,我正在与Steam API
合作,他们碰巧有很长的IDs
.
以下是我遵循的以下步骤:
- 获取
Dota2_items
组 (103582791433341052
) 的 ID 并插入到DB
中。 - 组中的 ID 正确存储到数据库中
- 从现在返回
103582791433341060
的数据库中获取相同的数字
GiveawayTasks::where('id', 1)->first()
翻译自拉拉维尔"select * from giveaway_task where id = 1"
请注意两个 ID 之间的 8 个差异值。看起来数据库已向初始 ID 添加了 8 个值。
为了解决这个问题,我做了PHP_MAX_INT
它返回9223372036854776000
。正是我所期望的来自64 bit machine
.现在我尝试从数据库中减去PHP_MAX_INT
和数字,以查看 int 是否大于PHP_MAX_INT
可以处理的:
PHP_MAX_INT - <Number from the database>
->9223372036854776000 - 103582791433341052 = 9119789245421434948
这使我得出结论,我不会试图在一个变量中存储比PHP_MAX_INT
可以处理的更多的东西。
我不确定这里发生了什么,因为这超出了我的专业知识。任何帮助将不胜感激。
我正在使用Laravel框架,但我认为这与这种情况无关。
与其使用Integers
不如使用String
代替您的ids
。您收到该错误是因为与输入103582791433341052
相比mysql
的最大整数值为2147483647 for 32-bit
。如果您将该integers
视为String
,则可能会解决问题。
您需要使用 BigInt 而不是 Int 作为"id"列类型。有关详细信息,请参阅此表。
编辑:字符串可能是更好的选择,如下面的评论所示。