Je connaissais booléen dans mysql comme tinyint (1)
.
Aujourd'hui, je vois une table avec un entier défini comme tinyint(2)
, et d'autres comme int(4)
, int(6)
...
Que signifie la taille dans les champs de type entier et tinyint?
Cela signifie largeur d'affichage
Que vous utilisiez tinyint (1) ou tinyint (2), cela ne fait aucune différence.
J'utilise toujours tinyint (1) et int (11), j'ai utilisé plusieurs clients mysql (navicat, sequel pro).
Cela ne veut rien dire AT ALL! J'ai fait un test, tous les clients ci-dessus ou même le client en ligne de commande semble l'ignorer.
Mais, la largeur d'affichage est primordiale si vous utilisez l'option ZEROFILL
, par exemple, votre tableau comporte les 2 colonnes suivantes:
A tinyint (2) zerofill
B tinyint (4) zerofill
les deux colonnes ont la valeur 1, le résultat de la colonne A serait 01
et 0001
pour B, comme indiqué dans la capture d'écran ci-dessous :)
Le (m)
indique la largeur d'affichage de la colonne; Des applications telles que le client MySQL utilisent cette fonctionnalité pour afficher les résultats de la requête.
Par exemple:
| v | a | b | c |
+-----+-----+-----+-----+
| 1 | 1 | 1 | 1 |
| 10 | 10 | 10 | 10 |
| 100 | 100 | 100 | 100 |
Ici, a
, b
et c
utilisent respectivement TINYINT(1)
, TINYINT(2)
et TINYINT(3)
. Comme vous pouvez le constater, il remplit les valeurs du côté gauche en utilisant la largeur d'affichage.
Il est important de noter que cela n'affecte pas la plage de valeurs acceptée pour ce type particulier, c'est-à-dire que TINYINT(1)
accepte toujours [-128 .. 127]
.
mysql> CREATE TABLE tin3(id int PRIMARY KEY,val TINYINT(10) ZEROFILL);
Query OK, 0 rows affected (0.04 sec)
mysql> INSERT INTO tin3 VALUES(1,12),(2,7),(4,101);
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM tin3;
+----+------------+
| id | val |
+----+------------+
| 1 | 0000000012 |
| 2 | 0000000007 |
| 4 | 0000000101 |
+----+------------+
3 rows in set (0.00 sec)
mysql>
mysql> SELECT LENGTH(val) FROM tin3 WHERE id=2;
+-------------+
| LENGTH(val) |
+-------------+
| 10 |
+-------------+
1 row in set (0.01 sec)
mysql> SELECT val+1 FROM tin3 WHERE id=2;
+-------+
| val+1 |
+-------+
| 8 |
+-------+
1 row in set (0.00 sec)
À propos de INT, TINYINT ... Il existe différents types de données, INT est un nombre de 4 octets, TINYINT est un nombre de 1 octet. Plus d'informations ici - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT .
La syntaxe du type de données TINYINT est TINYINT (M), où M indique la largeur d'affichage maximale (utilisée uniquement si votre client MySQL le prend en charge).