Au niveau des données, tinyint(1)
, tinyint(2)
, tinyint(3)
etc. sont tous exactement les mêmes. Ils sont tous compris entre -128 et 127 pour SIGNED
ou 0-255 pour UNSIGNED
. 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 application=wise les choses peuvent sembler différentes. Ici, tinyint(1)
peut prendre un sens particulier. Par exemple, le Connector/J (connecteur Java) traite tinyint(1)
en tant que valeur booléenne, et au lieu de renvoyer un résultat numérique à l'application, il convertit les valeurs en true
et false
. cela peut être changé via le tinyInt1isBit=false
paramètre de connexion.
Un tinyint(1) peut contenir des nombres compris entre -128 et 127, car le type de données est de 8 bits (1 octet) - évidemment, un tinyint non signé peut contenir des valeurs comprises entre 0 et 255.
Il tronquera silencieusement les valeurs hors plage :
mysql> create table a
-> (
-> ttt tinyint(1)
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> insert into a values ( 127 );
Query OK, 1 row affected (0.00 sec)
mysql> insert into a values ( -128 );
Query OK, 1 row affected (0.00 sec)
mysql> insert into a values ( 128 );
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> insert into a values ( -129 );
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> select * from a;
+------+
| ttt |
+------+
| 127 |
| -128 |
| 127 |
| -128 |
+------+
4 rows in set (0.00 sec)
mysql>
... sauf si vous modifiez le sql_mode
ou modifiez la configuration du serveur :
mysql> set sql_mode=STRICT_ALL_TABLES;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into a values ( -129 );
ERROR 1264 (22003): Out of range value for column 'ttt' at row 1
mysql>
La valeur utilisée dans le DDL pour le type de données (par exemple :tinyint(1)) est, comme vous vous en doutez, la largeur d'affichage. Cependant, il est facultatif et les clients ne sont pas obligés de l'utiliser. Le client MySQL standard ne l'utilise pas, par exemple.
https://dev.mysql .com/doc/refman/5.1/en/integer-types.html
https://dev .mysql.com/doc/refman/5.0/en/numeric-type-overview.html
MySql :Tinyint (2 ) vs tinyint(1) - quelle est la différence ?