php整形類型

問題:服務器數據庫中保存ip地址字段用的是有符號整形類型。這樣當保存的ip地址ip2long大於2147483647(127.255.255.255)後保存在數據庫中的值都是2147483647了。

原因:

       大於127.255.255.255的ip地址ip2long後的數值範圍超過了字段的存儲範圍。由於服務器數據庫沒有打開嚴格模式,這樣超過數據範圍的數據就按最大範圍值保存了也就是2147483647。

深入:

       爲了查找原因我在本地機器上ip2long(128.0.0.0)得到的結果是-2147483648。爲什麼服務器上保存到數據庫中的數據卻都是正整數。經過上網搜索和PHP手冊的查找。發現是int的數值範圍引起的。

       php手冊上有這麼一句話:整型數的字長和平臺有關,儘管通常最大值是大約二十億(32 位有符號)。PHP 不支持無符號整數。

       本機是windows32爲系統,這樣保存int的範圍是-2^32/2到2^32-1.而服務器上是64位系統這樣保存的數值範圍就比windows32下的多了。


       爲了驗證猜想:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章