Lorsque nous utilisons une longueur d'argument avec des types de données numériques, autant que je sache, cela spécifie la largeur d'affichage.
J'ai essayé ce qui suit:
mysql> create table boolean_test (var1 boolean, var2 tinyint);
Query OK, 0 rows affected (0.10 sec)
mysql> show create table boolean_test;
+--------------+-------------------------
| Table | Create Table
+--------------+-------------------------
| boolean_test | CREATE TABLE `boolean_test` (
`var1` tinyint(1) DEFAULT NULL,
`var2` tinyint(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+--------------+---------------------------
1 row in set (0.00 sec)
Tout d'abord, tinyint est une valeur de 1 octet. Alors quel est le sens de tinyint(4)
? Il ne peut pas y avoir 4 chiffres.
mysql> insert into boolean_test values(101,112);
Query OK, 1 row affected (0.03 sec)
mysql> select * from boolean_test;
+------+------+
| var1 | var2 |
+------+------+
| 10 | 112 |
| 101 | 112 |
+------+------+
2 rows in set (0.00 sec)
Je vois que dans tinyint j'ai stocké un 10 et 101 et je pourrais récupérer ces valeurs malgré le fait qu'il soit défini comme tinyint (1).
Ne devrais-je pas voir un 1 pour var1
? Ie seulement 1 chiffres d'affichage?
Réponses:
-Sage données,
tinyint(1)
,tinyint(2)
,tinyint(3)
etc sont tous exactement la même chose. Ils sont tous dans la gamme -128 à 127 pourSIGNED
ou 0-255 pourUNSIGNED
. Comme d'autres réponses l'ont noté, le nombre entre parenthèses n'est qu'un indice de largeur d'affichage.Vous voudrez peut-être noter, cependant, que les choses application = sage peuvent être différentes. Ici,
tinyint(1)
peut prendre une signification particulière. Par exemple, le connecteur / J (connecteur Java) est traitétinyint(1)
comme une valeur booléenne et au lieu de renvoyer un résultat numérique à l'application, il convertit les valeurs entrue
etfalse
. cela peut être modifié via letinyInt1isBit=false
paramètre de connexion.la source
Un tinyint (1) peut contenir des nombres compris entre -128 et 127, car le type de données est de 8 bits (1 octet) - de toute évidence, un tinyint non signé peut contenir des valeurs de 0 à 255.
Il tronquera silencieusement les valeurs hors limites:
... sauf si vous modifiez
sql_mode
ou modifiez la configuration du serveur:La valeur utilisée dans la DDL pour le type de données (par exemple: tinyint (1)) est, comme vous le soupçonniez, la largeur d'affichage. Cependant, il est facultatif et les clients n'ont pas à l'utiliser. Le client MySQL standard ne l'utilise pas, par exemple.
la source