首頁  >  文章  >  後端開發  >  MYSQL:int型別升級到bigint,對PHP開發語言影響

MYSQL:int型別升級到bigint,對PHP開發語言影響

不言
不言原創
2018-04-20 11:40:152693瀏覽

這篇文章介紹的內容是關於MYSQL:int類型升級到bigint,對PHP開發語言影響 ,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

因為業務成長,原有的unsigned int已經不夠使用,需要升級到unsigned bigint


#MYSQL整數支援的範圍:

##https://dev. mysql.com/doc/refman/5.7/en/integer-types.html


#

##1# ##-3276832767 中INT#-8388608#########INT##4 # ####################0#############4294967295###########-9223372036854775808#9223372036854775807
類型 儲存 最小值 #最大
  (位元組) (有符號/無符號) (有符號/無符號)
## TINYINT #-128 127
#0 #255
##SMALLINT##2
  ##0 #65535
##3 8388607
    ##0 #167777215
#-2147483648 2147483647
##BIGINT##8 ##9223372036854775807
#####################################################################################' ####### ###### ########0#############18446744073709551615############ ####

可以看到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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn