web-dev-qa-db-fra.com

MySql: Tinyint (2) vs tinyint (1) - quelle est la différence?

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?

159
realtebo

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 :)

zerofill with displaywidth

66
AamirR

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].

209
Ja͢ck
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)
18
zloctb

À 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).

Attributs de type numérique .

14
Devart