mysqlでcreate tableするときのint(5)としたときの意味をご存知でしょうか?
早速確認してみましょう。
zerofillオプションのあるもの、ないものでカラムを指定します。
1 2 3 4 |
create table kamo ( kamotora1 int(5) zerofill not null, kamotora2 int(5) not null ); |
ではinsertします。
1 |
insert into kamo(kamotora1,kamotora2) values (1,1); |
selectしてみます。
1 2 3 4 5 6 7 8 |
> select * from kamo; +-----------+-----------+ | kamotora1 | kamotora2 | +-----------+-----------+ | 00001 | 1 | +-----------+-----------+ 1 row in set (0.00 sec) > |
「kamotora1」のほうには、insertした1以外に「0」が表示されています。
テーブルの定義時にzefofillを使用すると、指定した桁数(今回は5桁)に足りない箇所は「0」で埋めてくれます。
「kamotora2」のほうはinsertした数字がそのまま格納されています。
6桁以上の場合は以下の通りになります。
まずはinsert。
1 |
> insert into kamo(kamotora1,kamotora2) values (123456,123456); |
以下の通りになります。
1 2 3 4 5 6 7 8 9 |
> select * from kamo; +-----------+-----------+ | kamotora1 | kamotora2 | +-----------+-----------+ | 00001 | 1 | | 1234456 | 123456 | +-----------+-----------+ 1 row in set (0.00 sec) > |
5桁以上なので、0が補完されていません。
intの後ろに桁数を指定しないと10桁になります。
1 2 3 |
> create table kamo2 ( kamotora1 int zerofill not null, ); |
insertしてみます。
1 |
> insert into kamo(kamotora1) values (1); |
以下の通り、0が補完されました。
1 2 3 4 5 6 7 |
> select * from kamo2; +------------+ | kamotora1 | +------------+ | 0000000001 | +------------+ 1 row in set (0.00 sec) |
int型の最大数がunsigned型で「4294967295」であり、それが10桁なので、()に桁を指定しない場合は10桁になるように0が補完されます。