Le contenu de cet article concerne MYSQL : la mise à niveau du type int vers bigint et son impact sur le langage de développement PHP. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer. 🎜>
Parce qu'à mesure que l'entreprise se développe, l'entier non signé d'origine n'est plus suffisant et doit être mis à niveau vers un bigint non signéhttps://dev.mysql.com/doc/refman/5.7/en/integer-types.html
Type | Stockage | Valeur minimale | Valeur maximale |
---|---|---|---|
(Octets) | (Signé/Non signé) | (Signé/Non signé) | |
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 |
Vous pouvez voir que l'ordre de grandeur pris en charge par bigint est très grand. Bien que le type de champ mysql ait été ajusté, notre langage de développement le prend-il en charge ?
Version PHP5.6 64 :
La plage de types int de PHP est PHP_INT_MIN (disponible pour PHP7) -
PHP_INT_MAX
,
Par exemple, sous x64-php, la plage maximale de int est : 9223372036854775807, correspondant au type BIGINT de MYSQL
Versions antérieures à PHP7 ! window sont toujours en 32 bits, et le comportement suivant sera différent des points listés ci-dessous
! Les entiers non signés
超过这个范围的int数,将会转化为float型。我们知道,表单提交或者从数据库取出的数据,是字符串类型,当我们用PHP进行运算的时候,以下几点需要注意的:
ne sont pas pris en charge. Veuillez vous référer à : http://php.net/manual/zh/lingual.types.integer.php
.1) fonction intval, la sortie de cette fonction ne prend en charge que la plage de type int si elle dépasse cette plage, elle doit utiliser une représentation sous forme de chaîne
$number = "9223372036854775900"; var_dump(intval($number)); //output,默认返回PHP_INT_MAX最大值 int(9223372036854775807)
2) Le type Int, en tant que valeur de clé de tableau, débordera, la solution doit donc pour convertir la clé en chaîne
$arr = []; $arr[9223372036854775900] = '1'; var_dump($arr); //output array(1) { [-9223372036854775808]=> string(1) "1" }
3) json_decode affecte
Si les données dépassent Après avoir vérifié la plage de int, le résultat analysé est de type float
$str = '[9223372036854775807,9223372036854775907]'; var_dump(json_decode($str)); //output array(2) { [0]=> int(9223372036854775807) [1]=> float(9.2233720368548E+18) }
De plus. , PHP ne peut pas prendre en charge les bigints non signés
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!