Em termos de dados,
tinyint(1)
, tinyint(2)
, tinyint(3)
etc. são todos exatamente iguais. Eles estão todos no intervalo -128 a 127 para SIGNED
ou 0-255 para UNSIGNED
. Como outras respostas observaram, o número entre parênteses é apenas uma dica de largura de exibição. Você pode querer notar, porém, que as coisas application=wise podem parecer diferentes. Aqui,
tinyint(1)
pode ter um significado especial. Por exemplo, o Connector/J (conector Java) trata tinyint(1)
como um valor booleano e, em vez de retornar um resultado numérico para o aplicativo, ele converte os valores em true
e false
. isso pode ser alterado através do tinyInt1isBit=false
parâmetro de conexão. Um tinyint(1) pode conter números no intervalo de -128 a 127, devido ao tipo de dados ser de 8 bits (1 byte) - obviamente um tinyint não assinado pode conter valores de 0 a 255.
Ele truncará silenciosamente fora dos valores do intervalo:
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>
... a menos que você altere o
sql_mode
ou altere a configuração do servidor: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>
O valor usado no DDL para o tipo de dados (por exemplo:tinyint(1)) é, como você suspeitou, a largura de exibição. No entanto, é opcional e os clientes não precisam usá-lo. O cliente MySQL padrão não o utiliza, por exemplo.
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) - qual é a diferença?