如何在php中使用Int64(long)而不是字符串


How to use Int64(long) in php but not string?

如何在像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"
}

我不知道该怎么办?

PHP中的INT类型链接到CPU安装的PHP版本(您可以在64位CPU上安装32位PHP)。

要了解PHP可以支持的最大整数,只需

echo PHP_INT_MAX;

这将给你最大的收获。它会给你20亿,或者是一个巨大的数字,太大以至于无法阅读(9.2亿左右)。

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

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

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

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