Eu sabia booleano no mysql como tinyint (1)
.
Hoje vejo uma mesa com definido um inteiro como tinyint(2)
, e também outros gostam int(4)
, int(6)
...
O que o tamanho significa no campo do tipo inteiro e tinyint?
Eu sabia booleano no mysql como tinyint (1)
.
Hoje vejo uma mesa com definido um inteiro como tinyint(2)
, e também outros gostam int(4)
, int(6)
...
O que o tamanho significa no campo do tipo inteiro e tinyint?
Respostas:
Significa largura de exibição
Se você usa tinyint (1) ou tinyint (2), isso não faz nenhuma diferença.
Eu sempre uso tinyint (1) e int (11), usei vários clientes mysql (navicat, sequel pro).
Isso não significa nada! Fiz um teste, todos os clientes acima ou mesmo o cliente da linha de comando parecem ignorar isso.
Porém, a largura da exibição é mais importante se você estiver usando a ZEROFILL
opção, por exemplo, sua tabela possui as 2 colunas seguintes:
Um zerofill tinyint (2)
B tinyint (4) zerofill
ambas as colunas têm o valor 1, a saída para a coluna A seria 01
e 0001
para B , como visto na captura de tela abaixo :)
O (m)
indica a largura de exibição da coluna; aplicativos como o cliente MySQL fazem uso disso ao mostrar os resultados da consulta.
Por exemplo:
| v | a | b | c |
+-----+-----+-----+-----+
| 1 | 1 | 1 | 1 |
| 10 | 10 | 10 | 10 |
| 100 | 100 | 100 | 100 |
Aqui a
, b
e c
estão usando TINYINT(1)
, TINYINT(2)
eTINYINT(3)
respectivamente. Como você pode ver, ele preenche os valores no lado esquerdo usando a largura da tela.
É importante observar que isso não afeta o intervalo de valores aceito para esse tipo específico, ou seja, TINYINT(1)
ainda aceita [-128 .. 127]
.
mysql> CREATE TABLE tin3(id int PRIMARY KEY,val TINYINT(10) ZEROFILL);
Query OK, 0 rows affected (0.04 sec)
mysql> INSERT INTO tin3 VALUES(1,12),(2,7),(4,101);
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM tin3;
+----+------------+
| id | val |
+----+------------+
| 1 | 0000000012 |
| 2 | 0000000007 |
| 4 | 0000000101 |
+----+------------+
3 rows in set (0.00 sec)
mysql>
mysql> SELECT LENGTH(val) FROM tin3 WHERE id=2;
+-------------+
| LENGTH(val) |
+-------------+
| 10 |
+-------------+
1 row in set (0.01 sec)
mysql> SELECT val+1 FROM tin3 WHERE id=2;
+-------+
| val+1 |
+-------+
| 8 |
+-------+
1 row in set (0.00 sec)
Sobre o INT, TINYINT ... Esses são tipos de dados diferentes, INT é um número de 4 bytes, TINYINT é um número de 1 byte. Mais informações aqui - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT .
A sintaxe do tipo de dados TINYINT é TINYINT (M), onde M indica a largura máxima de exibição (usada apenas se o seu cliente MySQL suportar).