Вашето решение за объркване е-
В Mysql int(6) не означава, че могат да съхраняват до 6 цифри. не повече от 999999.
Въпреки това CHAR(6) Това означава колона със знаци с максимална дължина от 6 знака, като тези думи:
къщи
Ако се опитам да съхраня думата „специален“ в тази колона, MySQL ще нареже стойността на „specia“, тъй като оригиналната дума има 7 знака.
Както и да е, всички колони с цели числа имат предварително зададен диапазон от разрешени стойности. Числото в скоби показва само ширината на дисплея.
Това вероятно все още е объркващо, така че нека обясня допълнително...
Ширината на дисплея е число от 1 до 255. Можете да зададете ширината на дисплея, ако искате всичките ви целочислени стойности да се „показват“ по подобен начин:
TINYINT[(M)] [НЕПОДПИСАНО] [ZEROFILL]
M показва максималната ширина на дисплея за целочислени типове. Максималната ширина на дисплея е 255. Ширината на дисплея не е свързана с диапазона от стойности, които типът може да съдържа, . За типовете с плаваща запетая и фиксирана запетая, M е общият брой цифри, които могат да бъдат съхранени.
Ако посочите ZEROFILL за числова колона, MySQL автоматично добавя атрибута UNSIGNED към колоната.
Така че отговорът на вашия въпрос е
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 |
+------+------+-----------------+
*Така че разберете, в Mysql ширината на дисплея работи само с нула запълване.
*ако използвате, не използвайте zerofill, това не е ефективно.
И ако използвате zerofill, тогава mysql ще провери ширината на дисплея, а ако не зададете, тогава mysql автоматично ще присвои ширина на дисплея на тази колона. *