【问题标题】:PHP/MYSQL converting unsigned int to signed intPHP/MYSQL 将无符号整数转换为有符号整数
【发布时间】: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 上,我得到0 for PHP(4 个八位字节整数),而 MySQL 似乎使用 8 个八位字节整数。
  • 试试var_dump(17640478426339470149) 它可能是双精度而不是整数。这可以解释最后一位数字的错误。
  • 伙计们,感谢您的解释,PHP 中存在一些溢出,但问题仍然没有得到解答,即使它得到了负 1 分。

标签: php mysql int signed


【解决方案1】:

我找到了解决方案,我不确定它是否是最佳解决方案,但至少它有效。

echo gmp_strval(gmp_com(gmp_xor('17640478426339470149', '0xffffffffffffffff')));
#-806265647370081467

【讨论】:

    猜你喜欢
    • 2012-01-09
    • 2017-07-21
    • 1970-01-01
    • 2011-06-14
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多