Din løsning på forvirring er-
I Mysql betyder int(6) ikke, at de kan gemme op til 6 cifre. ikke mere end 999999.
Men CHAR(6)Dette betyder en tegnkolonne med en maksimal længde på 6 tegn, såsom disse ord:
huse
Hvis jeg prøvede at gemme ordet "special" i den kolonne, ville MySQL skære værdien til "specia", da det originale ord har 7 tegn.
Under alle omstændigheder har heltalskolonner alle et forudindstillet værdiområde tilladt. Tallet i parentes angiver kun visningsbredden.
Dette er sandsynligvis stadig forvirrende, så lad mig forklare yderligere...
Skærmbredden er et tal fra 1 til 255. Du kan indstille skærmbredden, hvis du ønsker, at alle dine heltalværdier skal "vises" på samme måde:
TINYINT[(M)] [UNSIGNED] [ZEROFILL]
M angiver den maksimale visningsbredde for heltalstyper. Den maksimale visningsbredde er 255. Skærmbredden er ikke relateret til rækken af værdier, en type kan indeholde, . For typer med flydende komma og fast punkt er M det samlede antal cifre, der kan gemmes.
Hvis du angiver ZEROFILL for en numerisk kolonne, tilføjer MySQL automatisk UNSIGNED-attributten til kolonnen.
Så svaret på dit spørgsmål er
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å forstå, I Mysql virker skærmbredde kun med nulfyld.
*hvis du bruger, brug ikke zerofill, det er ikke effektivt.
Og hvis du bruger zerofill, vil mysql kontrollere display widht , og hvis du ikke tildeler, vil mysql automatisk tildele display-width til den kolonne. *