Twoim rozwiązaniem na zamieszanie jest-
W Mysql int(6) nie oznacza, że mogą przechowywać do 6 cyfr. nie więcej niż 999999.
Jednak CHAR(6)Oznacza to kolumnę znaków o maksymalnej długości 6 znaków, na przykład te słowa:
domy
Gdybym spróbował zapisać słowo „specia” w tej kolumnie, MySQL podzieliłby wartość na „specia”, ponieważ oryginalne słowo ma 7 znaków.
W każdym razie wszystkie kolumny liczb całkowitych mają wstępnie ustawiony zakres wartości. Liczba w nawiasie wskazuje tylko szerokość wyświetlania.
To prawdopodobnie nadal jest mylące, więc pozwól, że wyjaśnię dalej…
Szerokość wyświetlania to liczba od 1 do 255. Możesz ustawić szerokość wyświetlania, jeśli chcesz, aby wszystkie wartości całkowite „wyglądały” podobnie:
TINYINT[(M)] [BEZ PODPISU] [ZEROFILL]
M wskazuje maksymalną szerokość wyświetlania dla typów liczb całkowitych. Maksymalna szerokość wyświetlania to 255. Szerokość wyświetlania nie jest powiązana z zakresem wartości, jakie może zawierać typ, . W przypadku typów zmiennoprzecinkowych i stałoprzecinkowych M jest całkowitą liczbą cyfr, które można zapisać.
Jeśli określisz ZEROFILL dla kolumny numerycznej, MySQL automatycznie doda do kolumny atrybut UNSIGNED.
Więc odpowiedź na twoje pytanie to
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 |
+------+------+-----------------+
*Więc zrozum, w Mysql szerokość wyświetlania działa tylko z zerowym wypełnieniem.
*jeśli używasz nie używaj zerofill, nie jest to skuteczne.
Jeśli użyjesz zerofill, mysql sprawdzi szerokość ekranu , a jeśli nie przypiszesz, mysql automatycznie przypisze szerokość ekranu do tej kolumny. *