4

如何在 dotnet、java、c++ 等 php 中使用 Int64?

例如:

mysql 中的数据类型是 bigint(20),我想从 php 中保存值。我知道一种解决方案是在 mysql 程序中使用字符串。

表壳:

CREATE TABLE `test_int64` (
  `id` bigint(20) unsigned NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

mysql程序案例:

CREATE PROCEDURE `sp_test_int64`(IN p_id VARCHAR(20))
    NOT DETERMINISTIC
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
     INSERT INTO test_int64(id) VALUES(p_id+0);
END;

php代码案例:

$id = '1660820628901389';  Then execute sql 'call sp_test_int64(\''.$id.'\')'

上面的方法是可以的,但是我不想这样做。还有其他解决方案吗?

示例 2:

我想使用 PHP 读取 MYSQL 数据输出 JSON 代码,如下所示:

{
    "id":1660820628901389
}

但不是 :

{
    "id":"1660820628901389"
}

我不知道该怎么办?

4

1 回答 1

6

PHP 中的 INT 类型与 CPU安装的 PHP 版本相关(您可以在 64 位 CPU 上安装 32 位 PHP)。

要找出 PHP 可以支持的最大整数,只需

echo PHP_INT_MAX;

这会给你最大的。它会给你 20 亿,或者是一个太大而无法阅读的巨大数字(大约 92 亿)。

请注意,它已签名(-20 亿 -> +20 亿,或 -9 gazillion -> +9 gazilion)。您可以在 mySQL 中指定 unsigned,而 PHP 中没有此选项。

如果您只有 20 亿的限制,那么您已经安装了 32 位版本的 PHP。您可以在 64 位 CPU 上安装 PHP 64 位,或者您需要作为字符串处理,或者您可以使用BC Math函数将从 mySQL 返回的字符串转换为数字 - 但我不确定 JSON_encode将处理它*。如果你有很大的数字,你应该没问题并且可以作为整数处理。

  • JSON_encode 注意:过去我注意到 JSON_encode 和 serialize 将大数转换为浮点数,然后在内部丢失精度,即使它们是整数整数。我最近没有测试过,也没有在 64 位上测试过,但这是另一个需要注意的问题。

编辑:这是手册中的相关页面:http: //php.net/manual/en/language.types.integer.php 它还添加了GMP作为 BC Math 的替代方案

于 2012-08-21T06:56:36.067 回答