【问题标题】:INT more than 2147483647 always turn to 2147483647 in PHPINT 超过 2147483647 在 PHP 中总是转为 2147483647
【发布时间】:2018-02-20 09:01:16
【问题描述】:

我的 DB id 大于 2147483647(整数),所以当我将数据转换为 Json 时,如果我得到该 ID 会变成 2147483647。

这是我的 json 结果

[
    {"id":2147483647, "district_id":7171051, "name":"KARAME"},
    {"id":2147483647, "district_id":7171051, "name":"KETANG BARU"},
    {"id":2147483647, "district_id":7171051, "name":"WAWONASA"},
    {"id":2147483647, "district_id":7171051, "name":"TERNATE BARU"},
    {"id":2147483647, "district_id":7171051, "name":"TERNATE TANJUNG"},
    {"id":2147483647, "district_id":7171051, "name":"KOMBOS BARAT"},
    {"id":2147483647, "district_id":7171051, "name":"KOMBOS TIMUR"},
    {"id":2147483647, "district_id":7171051, "name":"SINGKIL SATU"},
    {"id":2147483647, "district_id":7171051, "name":"SINGKIL DUA"}
]

我的实际数据是

[
    {"id":7171051001, "district_id":7171051, "name":"KARAME"},
    {"id":7171051002, "district_id":7171051, "name":"KETANG BARU"},
    {"id":7171051003, "district_id":7171051, "name":"WAWONASA"},
    {"id":7171051004, "district_id":7171051, "name":"TERNATE BARU"},
    {"id":7171051005, "district_id":7171051, "name":"TERNATE TANJUNG"},
    {"id":7171051006, "district_id":7171051, "name":"KOMBOS BARAT"},
    {"id":7171051007, "district_id":7171051, "name":"KOMBOS TIMUR"},
    {"id":7171051008, "district_id":7171051, "name":"SINGKIL SATU"},
    {"id":7171051009, "district_id":7171051, "name":"SINGKIL DUA"}
]

我正在使用 Laravel 5.4 如何使它成为我的实际身份证? 谢谢。

【问题讨论】:

  • 很难将图像复制并粘贴到文本编辑器中以验证结果。请用formatted text 替换嵌入的图像。并包含您用于处理数据并生成这些结果的源代码。
  • 听起来您正在运行 32 位 PHP 和/或 32 位硬件,因此您达到了最大整数大小。您需要查看 64 位硬件和 64 位 PHP 版本。
  • 这绝对是因为您在 32 位硬件上从初始字符串转换为 int。
  • 如果该列是整数,您可以尝试使用 bigint。如果您不需要将其视为整数,则可以将其存储为字符串。但我认为它会溢出而不是像那样固定
  • 我正在运行 32 位,所以我更改为 64 位然后它可以工作。谢谢@fubar ishegg Qirel

标签: php json laravel laravel-5.4


【解决方案1】:

在 PHP 中,您不能有大于 PHP_INT_MAX 的整数,在 32 位硬件(或 32 位 PHP)中是 2147483647 = 2^31-1,这是您得到的数字(仅供参考,以 64 -位是9223372036854775807 = 2^63-1)。而且,无论您从何处获取原始数据,其 ID 都是字符串(注意它们周围的引号)。

因此,当您将其转换为整数时,它会被截断为2147483647。现在,您有两个选择:

  • 将您的硬件/PHP 版本升级到 64 位。然后,如前所述,您仍然会有 9223372036854775807 限制,这显然要高得多。
  • 如果您不使用您的 ID 进行任何算术运算,您可以将它们保存为字符串。字母数字 ID 没有任何问题。但是,在这种情况下,您必须小心地将其视为整个堆栈中的字符串。

【讨论】:

    【解决方案2】:

    大于 2147483647 的整数值在 64 位平台上的 PHP 中可用。如果您使用 32 位平台,则对最大整数值有限制。 这个麻烦的另一个原因是您的 php 配置 (php.ini) 中的 PHP_INT_SIZE var。

    Json 无关紧要。

    您可以阅读更多http://php.net/manual/en/language.types.integer.php

    【讨论】:

      猜你喜欢
      • 2011-04-06
      • 2019-06-20
      • 2013-07-24
      • 2021-07-29
      • 2013-09-30
      • 2022-08-13
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      相关资源
      最近更新 更多