今回は、MySQLのint()括弧内の値について調べていきたいと思います。
int()の意味
int_1 INT(11)
注意することは上記の1の意味は1桁保存できるよ〜という意味ではありません。
それでは検証してみまましょう
検証
CREATE TABLE test (
int_1 INT(1),
int_2 INT(5),
int_3 INT(9),
int_4 INT(11),
)ENGINE=INNODB DEFAULT CHAR SET =UTF8;
INSERT INTO test VALUES(1,1,1,1);
INSERT INTO test VALUES(12345,12345,12345,12345);
INSERT INTO test VALUES(1234567890,1234567890,1234567890,1234567890);
上記のSelectの結果はどうでしょう!
| int_1 | int_2 | int_3 | int_4 |
| 1 | 1 | 1 | 1 |
| 12345 | 12345 | 12345 | 12345 |
| 1234567890 | 1234567890 | 1234567890 | 1234567890 |
なんと!上記のような結果が出ます。
理由
https://dev.mysql.com/doc/refman/8.0/en/numeric-types.html
実はint(11)の数字の意味は「ZEROFILL」のオプションのための値です。ZEROFILLは画面に表示するときに先頭0埋めで表示してというオプションです。
CREATE TABLE test (
int_1 INT(1),
int_1_z INT(1) ZEROFILL,
int_2 INT(5),
int_2_z INT(5) ZEROFILL,
int_3 INT(9),
int_3_z INT(9) ZEROFILL,
)ENGINE=INNODB DEFAULT CHAR SET =UTF8;
INSERT INTO test VALUES(1,1,1,1,1,1);
INSERT INTO int_test VALUES(12345,12345,12345,12345,12345,12345);
INSERT INTO int_test VALUES(1234567890,1234567890,1234567890,1234567890,1234567890,1234567890);
上記のSelect結果も確認してみましょう。
| int_1 | int_1_z | int_2 | int_2_z | int_3 | int_3_z |
| 1 | 1 | 1 | 00001 | 1 | 000000001 |
| 12345 | 12345 | 12345 | 12345 | 12345 | 000012345 |
| 1234567890 | 1234567890 | 1234567890 | 1234567890 | 1234567890 | 1234567890 |
先頭0埋めされることを確認できます。
終わり
int(11)の括弧内の値は「ZEROFILL」オプションがないと意味がないということでした。
