如何在像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 的替代方案