Din lösning på förvirring är-
I Mysql betyder inte int(6) att de kan lagra upp till 6 siffror. inte mer än 999999.
Men CHAR(6)Detta betyder en teckenkolumn med en maximal längd på 6 tecken, såsom dessa ord:
hus
Om jag försökte lagra ordet "special" i den kolumnen, skulle MySQL skära värdet till "specia", eftersom det ursprungliga ordet har 7 tecken.
Hur som helst, heltalskolumner har alla ett förinställt värdeintervall. Siffran inom parentes anger endast displayens bredd.
Detta är förmodligen fortfarande förvirrande, så låt mig förklara ytterligare...
Visningsbredden är ett tal från 1 till 255. Du kan ställa in displaybredden om du vill att alla dina heltalsvärden ska "visas" på samma sätt:
TINYINT[(M)] [OSIGNERAD] [ZEROFILL]
M indikerar den maximala visningsbredden för heltalstyper. Den maximala visningsbredden är 255. Visningsbredden är inte relaterad till intervallet av värden som en typ kan innehålla, . För flyttals- och fixpunktstyper är M det totala antalet siffror som kan lagras.
Om du anger ZEROFILL för en numerisk kolumn, lägger MySQL automatiskt till UNSIGNED-attributet till kolumnen.
Så svaret på din fråga är
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 |
+------+------+-----------------+
*Så förstå, i Mysql fungerar skärmbredden bara med zerofill.
*om du använder använd inte zerofill, det är inte effektivt.
Och om du använder zerofill kommer mysql att kontrollera display widht , och om du inte tilldelar kommer mysql automatiskt att tilldela visningsbredd till den kolumnen. *