Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quelle est la signification du paramètre TINYINT(paramètre) ?

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 ?