mysqlのint(11)の11
MySQL Manual | 6.2.1 数値型けっこう勘違いしている人がいそうなのですが、mysqlの型でint(?)とか、?に数字を入れますが、この数字は上記の通りZEROFILLをした際にスペースに代わってゼロが埋め込まれる際の幅なのです。自分は勘違いというかあまりよくわかっていませんでした…。
MySQL には、INT(4) のように、型の基本キーワードに続いて整数値の表示幅をかっこ内に指定できるオプションがあります。このオプションの表示幅の指定は、カラムに指定された幅より小さい幅を持つ値で表示の左側を埋める目的で使用されますが、そのカラムに格納できる値の範囲が制限されたり、そのカラムに指定された幅を超える幅を持つ値の桁数が制限されたりすることはありません。オプションの拡張属性 ZEROFILL と組み合せて使用した場合、デフォルトのスペースに代わってゼロが埋め込まれます。
つまり
CREATE TABLE `test` ( `id` int(11) NOT NULL auto_increment, `n1` int(10) unsigned zerofill default NULL, `n2` int(5) unsigned zerofill default NULL, `n3` int(10) unsigned default NULL, `n4` int(5) unsigned default NULL, PRIMARY KEY (`id`) );こんなテーブルだとして、
mysql> INSERT INTO test (n1, n2, n3, n4) VALUES (1, 1, 1, 1);こんなクエリを発行すると
mysql> select * from test; +----+------------+-------+------+------+ | id | n1 | n2 | n3 | n4 | +----+------------+-------+------+------+ | 1 | 0000000001 | 00001 | 1 | 1 | +----+------------+-------+------+------+こんな感じになります。なのでいくらint(4)とかint(11)とか数字を書いても、格納できる数の上下限は下記の表の通りとなり、4とか11はまったく関係ないです。
型 | バイト | 最小値 | 最大値 |
TINYINT | 1 | -128 | 127 |
SMALLINT | 2 | -32768 | 32767 |
MEDIUMINT | 3 | -8388608 | 8388607 |
INT | 4 | -2147483648 | 2147483647 |
BIGINT | 8 | -9223372036854775808 | 9223372036854775807 |