Maison  >  Article  >  développement back-end  >  MYSQL : mise à niveau du type int vers bigint, impact sur le langage de développement PHP

MYSQL : mise à niveau du type int vers bigint, impact sur le langage de développement PHP

不言
不言original
2018-04-20 11:40:152642parcourir

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é


Plage prise en charge des entiers MYSQL :

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn