【发布时间】:2013-03-25 16:27:32
【问题描述】:
在mysql中:
select CAST(17640478426339470149 as SIGNED INTEGER); #-806265647370081467
在 php 中:
echo sprintf("%d", 17640478426339470149); #-806265647370082304
我将如何获得相同的签名 int ? (以及为什么会出现这种差异?)
【问题讨论】:
-
检查整数大小和上下限。
-
在我的带有 WAMP 的 32 位 x86 Windows XP 上,我得到
0for PHP(4 个八位字节整数),而 MySQL 似乎使用 8 个八位字节整数。 -
试试
var_dump(17640478426339470149)它可能是双精度而不是整数。这可以解释最后一位数字的错误。 -
伙计们,感谢您的解释,PHP 中存在一些溢出,但问题仍然没有得到解答,即使它得到了负 1 分。