MySQLの型で気になった~その3:ZEROFILLオプション~
何かシリーズ化してしまっているMySQLの型で気になったシリーズです。 前回ZEROFILLオプションというのがあるとチラッと書いて、気になったのでまた試してみました。--ZEROFILLオプションを指定するとどうなるのか--mysql> create table `test_tbl4` (`ti` tinyint ZEROFILL,`ti1` tinyint(1) ZEROFILL,`ti2` tinyint(2) ZEROFILL,`ti3` tinyint(3) ZEROFILL,`ti4` tinyint(4) ZEROFILL,`ti5` tinyint(5) ZEROFILL);Query OK, 0 rows affected (0.01 sec)mysql> desc test_tbl4;+-------+------------------------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+------------------------------+------+-----+---------+-------+| ti | tinyint(3) unsigned zerofill | YES | | NULL | || ti1 | tinyint(1) unsigned zerofill | YES | | NULL | || ti2 | tinyint(2) unsigned zerofill | YES | | NULL | || ti3 | tinyint(3) unsigned zerofill | YES | | NULL | || ti4 | tinyint(4) unsigned zerofill | YES | | NULL | || ti5 | tinyint(5) unsigned zerofill | YES | | NULL | |+-------+------------------------------+------+-----+---------+-------+6 rows in set (0.01 sec) 前回を見ている方はアレ?と思ったかもしれません。というか実際私も ぇ? となりました。 まず全体的にzerofillしかつけていないはずなのにunsignedが自動で付いています。 これについてはマニュアルに記載がありました。あれほどマニュアルは読めと( でも何故付くんだろう・・・-0001とか表現がありえないから??謎です・・・ unsignedオプションが自動で付くことにより、表示桁数指定なしの場合のデフォルトが4から3に変わっています。(前回参照) この事からおさかなさんの"「マイナス記号を含めた最大の桁数」が付くんでしょうね。"という考えが結構裏付けされたんではないでしょうか?--値を入れてみる--mysql> insert into test_tbl4 values(1,1,1,1,1,1);Query OK, 1 row affected (0.00 sec)mysql> insert into test_tbl4 values(11,11,11,11,11,11);Query OK, 1 row affected (0.00 sec)mysql> insert into test_tbl4 values(111,111,111,111,111,111);Query OK, 1 row affected (0.00 sec)mysql> insert into test_tbl4 values(1111,1111,1111,1111,1111,1111);Query OK, 1 row affected, 6 warnings (0.00 sec)mysql> select * from test_tbl4;+------+------+------+------+------+-------+| ti | ti1 | ti2 | ti3 | ti4 | ti5 |+------+------+------+------+------+-------+| 001 | 1 | 01 | 001 | 0001 | 00001 || 011 | 11 | 11 | 011 | 0011 | 00011 || 111 | 111 | 111 | 111 | 0111 | 00111 || 255 | 255 | 255 | 255 | 0255 | 00255 |+------+------+------+------+------+-------+4 rows in set (0.00 sec) はい、見事に先頭が0で埋まった形となっています。 最後のクエリは予想通り符号なしの最大値255に丸められてます。 こうやって使うんですね~勉強になりました。