這篇文章介紹的內容是關於MYSQL:int類型升級到bigint,對PHP開發語言影響 ,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
因為業務成長,原有的unsigned int已經不夠使用,需要升級到unsigned bigint
#MYSQL整數支援的範圍:
##https://dev. mysql.com/doc/refman/5.7/en/integer-types.html#
類型 | 儲存 | 最小值 | #最大 |
---|---|---|---|
(位元組) | (有符號/無符號) | (有符號/無符號) | |
## TINYINT | ##1#-128
|
127
| |
# | #0
|
#255
| #|
##SMALLINT ##2 |
#-32768 |
| 32767
|
##0 |
#65535 |
| |
##3
| #-83886088388607 |
|
|
##0
|
#167777215
|
||
|
|
|
|
##4 | #-2147483648
|
2147483647
|
|
##BIGINT ##8 |
#-9223372036854775808 |
| #9223372036854775807##9223372036854775807 |
|
|
可以看到bigint支援的數量級非常大。雖然mysql字段類型調整了,但是我們的開發語言是否支援呢?
PHP5.6 64版本:
#PHP的int型範圍是PHP_INT_MIN(PHP7可用) #-
PHP_INT_MAX
,
例如在x64-php下,int的最大範圍是:9223372036854775807,對應MYSQL的BIGINT型別
!window下PHP7之前的版本總是32位元的,且以下行為會跟下面列出來的點不同
!不支援無符號的整數
超過這個範圍的int數,將會轉換為float型。我們知道,表單提交或從資料庫取出的數據,是字串類型,當我們用PHP進行運算的時候,以下幾點需要注意的:
可參考:http://php .net/manual/zh/language.types.integer.php
#1)intval函數,此函數輸出只支援int型範圍,超過這個範圍的需要使用字串表示
$number = "9223372036854775900"; var_dump(intval($number)); //output,默认返回PHP_INT_MAX最大值 int(9223372036854775807)
#2)int型態作為陣列鍵值,會溢出,因此解決方案需要把鍵轉換為字串
$arr = [];
$arr[9223372036854775900] = '1';
var_dump($arr);
//output
array(1) {
[-9223372036854775808]=>
string(1) "1"
}
#3) json_decode影響
如果資料超出了int的範圍,解析出來的是float型
$str = '[9223372036854775807,9223372036854775907]'; var_dump(json_decode($str)); //output array(2) { [0]=> int(9223372036854775807) [1]=> float(9.2233720368548E+18) }################此外,PHP無法支援unsigned bigint##################################################################################################################
以上是MYSQL:int型別升級到bigint,對PHP開發語言影響的詳細內容。更多資訊請關注PHP中文網其他相關文章!