2013-03-25 107 views
-1

PHP/MySQL的unsigned int類型轉換爲簽署在MySQL INT

select CAST(17640478426339470149 as SIGNED INTEGER); #-806265647370081467 
在PHP

echo sprintf("%d", 17640478426339470149); #-806265647370082304 

我怎麼會得到相同符號整型? (以及爲什麼會發生這種差異?)

+0

檢查整數大小,從而確定上限/下限。 – SparKot 2013-03-25 16:32:10

+0

在我用WAMP的32位x86 Windows XP上,PHP獲得'0'(4個八位字節整數),MySQL似乎使用8個八位字節整數。 – SparKot 2013-03-25 16:45:28

+0

嘗試'var_dump(17640478426339470149)'它可能是一個double而不是int。這將解釋最後一位數字中的錯誤。 – Vatev 2013-03-25 18:04:01

回答

0

我找到解決方案,我不確定,如果它是最佳的,但至少可以工作。

echo gmp_strval(gmp_com(gmp_xor('17640478426339470149', '0xffffffffffffffff'))); 
#-806265647370081467 
相關問題