BIGINT、INTEGER/INT、SMALLINT、TINYINT型の列を作成した場合は「int(11)」といったように自動で「(数値)」が指定されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
mysql> CREATE TABLE t1( -> col1 bigint, -> col2 int, -> col3 smallint, -> col4 tinyint) -> ENGINE=InfiniDB; Query OK, 0 rows affected (0.20 sec) mysql> DESC t1; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | col1 | bigint(20) | YES | | NULL | | | col2 | int(11) | YES | | NULL | | | col3 | smallint(6) | YES | | NULL | | | col4 | tinyint(4) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 4 rows in set (0.01 sec) |
この括弧内の値は、格納可能な桁数ではありません。
列にZEROFILLオプションを付与した際に、指定された値の桁数に満たない数値が格納された場合にゼロで埋めるというものです。
col2列にのみZEROFILLオプションを付与した場合の例)
※MyISAMテーブルで作成しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
mysql> CREATE TABLE t2( -> col1 int(30), -> col2 int(30) ZEROFILL) -> ENGINE=MyISAM; Query OK, 0 rows affected (0.01 sec) mysql> INSERT INTO t2 VALUES(1,1); Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM t2; +------+--------------------------------+ | col1 | col2 | +------+--------------------------------+ | 1 | 000000000000000000000000000001 | +------+--------------------------------+ 1 row in set (0.00 sec) |
col1、col2ともに「1」を挿入していますが、ZEROFILLオプションが付与されているcol2は、指定した桁数になるようにゼロで埋められます。
col1のようにZEROFILLオプションを使用しない場合は、実行結果などの動作に影響は与えません。
ただし、InfiniDBではZEROFILLオプションはサポートしていないため指定しようとするとエラーになります。
1 2 3 4 5 |
mysql> CREATE TABLE t2( -> col1 int(30), -> col2 int(30) ZEROFILL) -> ENGINE=InfiniDB; ERROR 138 (HY000): The syntax or the data type(s) is not supported by InfiniDB. Please check the InfiniDB syntax guide for supported syntax or data types. |
そのため、InfiniDBではテーブル作成時にINT型などの括弧内の値を指定しても、実行結果などの動作に影響は与えません。
BIGINT、INTEGER/INT、SMALLINT、TINYINT型についてはデータ型ごとに扱えるデータ範囲が決まっているので、格納したい値が納まるデータ型を使用してください。
参考情報
各データが型が扱えるデータの範囲については「InfiniDB SQL構文ガイド」のマニュアルをご確認ください。※InfiniDBの日本語マニュアルは「ダウンロード」記事でご確認いただけます。
http://infinidb-tech.ashisuto.co.jp/category/technical-info/download/