Je cherchais un emploi récemment, j'ai donc passé des entretiens. Au cours du processus d'entretien, j'ai exposé bon nombre de mes lacunes et j'ai résumé et résumé. La plupart des intervieweurs poseront peut-être des questions sur MySQL telles que l'optimisation des bases de données, la réplication maître-esclave, les index, les moteurs, etc. Alors ce qui me frappe le plus, c'est quelle est la différence entre int (10) et int (11). Cela semble être la question la plus fondamentale, et je ne semble jamais m'en soucier. J’étais un peu confus à l’époque, quelle est la différence ? je n'en ai aucune idée ! Je n'y ai jamais pensé !
Après mon retour chez moi, j'ai rapidement passé en revue les connaissances liées au type de données MySQL. Quelques mots sur les types entiers.
Type de données entier dans MySQL
数据类型 | 说明 | 存储需求 |
---|---|---|
tinyint | 很小的整数 | 1 字节 |
smallint | 小的整数 | 2 字节 |
mediumint | 中等大小的整数 | 3 字节 |
int(integer) | 普通大小的整数 | 4 字节 |
bigint | 大整数 | 8 字节 |
Plage de valeurs de différents types
数据类型 | 有符号 | 无符号 |
---|---|---|
tinyint | -128~127 | 0~255 |
smallint | -32768~32767 | 0~65535 |
mediumint | -8388608~8388607 | 0~16777215 |
int(integer) | -2147483648~2147483647 | 0~4294967295 |
bigint | -9223372036854775808~9223372036854775807 | 0~18446744073709551615 |
Largeur d'affichage par défaut de différents types de données
数据类型 | 默认显示宽度 |
---|---|
tinyint | 4 |
smallint | 6 |
mediumint | 9 |
int(integer) | 11 |
bigint | 20 |
* Étant donné que le signe négatif occupe un chiffre, la largeur de chaque type est le chiffre maximum + 1 chiffre. Par exemple, le nombre maximum de chiffres pour tinyint est de 3, plus le signe négatif, donc la largeur d'affichage est de 4.
Alors, quelle est la relation entre la plage de valeurs et la largeur d'affichage ? J'ai fait une expérience en utilisant tinyint. Tout d'abord, j'ai créé un tableau comme suit
mysql> desc test_integer; +-----------+------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | test_id_1 | tinyint(1) | NO | | NULL | | | test_id_2 | tinyint(4) | NO | | NULL | | +-----------+------------+------+-----+---------+----------------+ 3 rows in set (0.00 sec)
J'ai créé deux champs, test_id_1 et test_id_2, de type tinyint signé, avec une largeur d'affichage de 1 et test_id_2, avec une largeur d'affichage. sur 4. Ensuite, j'ai inséré les données, et en même temps j'ai inséré les valeurs - 128, 1 et 127 et j'ai vu ce qui se passe.
mysql> insert into test_integer (test_id_1,test_id_2) values (-128,-128), (1,1), (127,127); Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0
ok indique que l'insertion est réussie. Interrogons
mysql> select * from test_integer; +----+-----------+-----------+ | id | test_id_1 | test_id_2 | +----+-----------+-----------+ | 1 | -128 | -128 | | 2 | 1 | 1 | | 3 | 127 | 127 | +----+-----------+-----------+ 3 rows in set (0.00 sec)
et le résultat est le même. Après l'expérience ci-dessus, nous tirons la conclusion :
La plage de valeurs. du type entier de largeur d’affichage n’est pas pertinent. La largeur d'affichage spécifie uniquement le nombre maximum de nombres pouvant être affichés par MySQL. Si le nombre de chiffres est inférieur à la largeur spécifiée, il sera rempli d'espaces si une valeur supérieure à la largeur d'affichage est insérée. la valeur ne dépasse pas la plage de valeurs de l'entier de ce type, la valeur Il peut toujours être inséré et affiché.
De même, il n'y a pas de différence entre int (10) et int (11), sauf que la largeur d'affichage est différente. Amis, ne l'oubliez pas.
Tutoriel recommandé : "Tutoriel PHP"
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!