混乱に対するあなたの解決策は-
Mysqlでは、int(6)は最大6桁を格納できることを意味しません。 999999以下。
ただし、CHAR(6)これは、次の単語のように、最大長が6文字の文字列を意味します。
家
その列に「special」という単語を格納しようとすると、元の単語は7文字であるため、MySQLは値を「specia」に切り刻みます。
とにかく、整数列にはすべて、事前に設定された値の範囲が許可されています。括弧内の数字は表示幅のみを示します。
これはおそらくまだ混乱しているので、さらに説明させてください…
表示幅は1〜255の数値です。すべての整数値を同様に「表示」する場合は、表示幅を設定できます。
TINYINT [(M)] [UNSIGNED] [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を使用する場合、mysqlはdisplay widhtをチェックし、割り当てない場合、mysqlは自動的にdisplay-widthをその列に割り当てます。 *