Uw oplossing voor verwarring is-
In Mysql betekent int(6) niet dat ze tot 6 cijfers kunnen opslaan. niet meer dan 999999.
Echter CHAR(6)Dit betekent een karakterkolom, met een maximale lengte van 6 karakters, zoals deze woorden:
huizen
Als ik zou proberen het woord 'specia' in die kolom op te slaan, zou MySQL de waarde hakken om 'specia' te zijn, aangezien het oorspronkelijke woord 7 tekens heeft.
Hoe dan ook, kolommen met gehele getallen hebben allemaal een vooraf ingesteld bereik van toegestane waarden. Het getal tussen haakjes geeft alleen de weergavebreedte aan.
Dit is waarschijnlijk nog steeds verwarrend, dus laat me het verder uitleggen...
De weergavebreedte is een getal van 1 tot 255. U kunt de weergavebreedte instellen als u wilt dat al uw gehele waarden op dezelfde manier "verschijnen":
TINYINT[(M)] [UNSIGNED] [ZEROFILL]
M geeft de maximale weergavebreedte aan voor typen integers. De maximale weergavebreedte is 255. De weergavebreedte is niet gerelateerd aan de reeks waarden die een type kan bevatten, . Voor typen met drijvende komma en vaste komma is M het totale aantal cijfers dat kan worden opgeslagen.
Als u ZEROFILL opgeeft voor een numerieke kolom, voegt MySQL automatisch het UNSIGNED-attribuut toe aan de kolom.
Dus het antwoord op uw vraag is
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 |
+------+------+-----------------+
*Dus begrijp dat de weergavebreedte in Mysql alleen werkt met zerofill.
*als je zerofill niet gebruikt, is het niet effectief.
En als je zerofill gebruikt, dan zal mysql de display widht controleren, en als je dat niet toewijst, zal mysql automatisch de display-width aan die kolom toewijzen. *