【问题标题】:php converting string to int not giving the right valuephp将字符串转换为int没有给出正确的值
【发布时间】:2013-08-11 02:45:16
【问题描述】:

我正在与 facebook api 交互,它向我发送了一些相当大的 id 比如

$facebook_action['id'] => "123540931515315"
intval($facebook_action['id']) gives me "2147483647"

在我的数据库中,我计划将它存储为一个整数,但是这些可能太大,因为在 php 转换中返回给我最大的 int 值。 我应该将它们存储为字符串还是如何处理?

在 MySQL 中,我看到我可以使用 BIG INTEGER,但是如何在 PHP 中处理它?

【问题讨论】:

  • 我遇到了同样的问题。我刚刚将其设为varchar。不是说这是最佳实践,但这是我所做的。还因为如果 Facebook 决定在他们的 ID 中添加字母或一些奇怪的东西怎么办。由于您不控制传入的数据,因此我说要灵活。整数非常严格,它们不能以 0 开头。所以,简单地说,字符串对于您无法控制的数据更加灵活。
  • varchar 是在 PHP 中将其视为字符串的方法
  • 字符串...反正你别无选择...
  • 啊,好的,谢谢!实际上,我只是让它在 mysql 中使用 BIG INT,将其视为 php 中的字符串并让 mysql 转换为 big int,尽管它感觉并不强大。
  • 我会将其保留为字符串。无论如何,您都不会使用该数字进行计算,或者它代表一个数量或类似的东西。它实际上是一个字符串,只是它包含数字。

标签: php mysql integer-overflow


【解决方案1】:

您超出了 PHP 中整数类型的限制。 32 位系统的最大有符号整数范围为 -2147483648 到 2147483647。因为您正在使用的值超过 2147483647,所以它存储了 2147483647。请参阅http://php.net/manual/en/function.intval.php。您可能想要按照某些评论者的建议去做,并改用 varchar,尤其是当这些值可能包含非数字字符时。

【讨论】:

    【解决方案2】:

    将您的系统升级到 64 位架构以处理大整数值 :)

    intval 的“返回值”部分明确说明了您获得 2147483647 的原因。

    即32 位系统的最大有符号整数范围为 -2147483648 到 2147483647。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      • 2014-07-23
      • 2020-03-04
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多