MySql: Tinyint(2) vs tinyint (1) - Quelle est la différence?
j'ai connu boolean dans mysql comme tinyint (1)
.
Aujourd'hui , je vois une table avec défini un entier comme tinyint(2)
, et aussi d'autres comme int(4)
, int(6)
...
que signifie la taille dans le champ de type entier et tinyint ?
4 réponses
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).
ça ne veut rien dire du tout! J'ai fait un test, au-dessus des clients ou même le client en ligne de commande semble l'ignorer.
mais, largeur d'affichage est le plus important si vous utilisez l'option ZEROFILL
, par exemple votre tableau a les 2 colonnes suivantes:
Un tinyint(2) zerofill ne
B tinyint (4) zerofill
les deux colonnes ont la valeur de 1, la sortie pour la colonne A serait 01
et 0001
pour B , comme vu dans screenshot ci-dessous:)
le (m)
indique la largeur d'affichage de la colonne; des applications telles que le client MySQL l'utilisent 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 voir, il rembourre les valeurs sur le côté gauche en utilisant la largeur d'affichage.
il est important de noter que il n'affecte pas la plage de valeurs acceptée pour ce type particulier, c'est-à-dire 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 L'INT, TINYINT... Il s'agit de 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 seulement si votre client MySQL le supporte).