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

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

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


MYSQL整數支援的範圍:

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


Type Storage Minimum Value Maximum Value
(Bytes) (Signed/Unsigned) (Signed/Unsigned)
TINYINT 1 -128 127
0 255
SMALLINT 2 -32768 32767
0 65535
MEDIUMINT 3 -8388608 8388607
0 16777215
INT 4 -2147483648 2147483647
0 4294967295
BIGINT 8 -9223372036854775808 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);//outputarray(1) {  [-9223372036854775808]=>  string(1) "1"}



3)json_decode影響

如果資料超出了int的範圍,解析出來的是float型

$str = '[9223372036854775807,9223372036854775907]';var_dump(json_decode($str));//outputarray(2) {  [0]=>  int(9223372036854775807)  [1]=>  float(9.2233720368548E+18)}


此外,PHP無法支援unsigned bigint



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.