Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Qual é o parâmetro de significado TINYINT(parâmetro)?


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?