Sua solução para a confusão é-
No Mysql , int(6) não significa que eles podem armazenar até 6 dígitos. não superior a 999999.
No entanto CHAR(6)Isso significa uma coluna de caracteres, com um comprimento máximo de 6 caracteres, como estas palavras:
casas
Se eu tentasse armazenar a palavra “special” nessa coluna, o MySQL cortaria o valor para “specia”, já que a palavra original tem 7 caracteres.
De qualquer forma, todas as colunas inteiras têm um intervalo predefinido de valores permitidos. O número entre parênteses indica apenas a largura da tela.
Isso provavelmente ainda é confuso, então deixe-me explicar mais…
A largura da tela é um número de 1 a 255. Você pode definir a largura da tela se quiser que todos os seus valores inteiros “apareçam” de forma semelhante:
TINYINT[(M)] [NÃO ASSINADO] [ZEROFILL]
M indica a largura máxima de exibição para tipos inteiros. A largura máxima de exibição é 255. A largura de exibição não está relacionada ao intervalo de valores que um tipo pode conter, . Para tipos de ponto flutuante e ponto fixo, M é o número total de dígitos que podem ser armazenados.
Se você especificar ZEROFILL para uma coluna numérica, o MySQL adiciona automaticamente o atributo UNSIGNED à coluna.
Então a resposta da sua pergunta é
create table foo
(
col2 tinyint(2) unsigned zerofill, col4 tinyint(4) unsigned zerofill, col5notzerofill tinyint(5)
)engine=innodb;
insert into foo values (1,2,3),(11,12,14),(123,123,156),(1234,1234,12756);
select * from foo;
OUTPUT :-
+------+------+-----------------+
| col2 | col4 | col5notzerofill |
+------+------+-----------------+
| 01 | 0002 | 3 |
| 11 | 0012 | 14 |
| 123 | 0123 | 127 |
| 255 | 0255 | 127 |
+------+------+-----------------+
*Então entenda, no MySQL a largura do display só funciona com zerofill.
*se usar não use zerofill, não é eficaz.
E se você usar zerofill, o mysql verificará a largura de exibição, e se você não atribuir, o mysql atribuirá automaticamente a largura de exibição a essa coluna. *