int(3), int(5), int(10), int(11) в скобочках означает не максимальную длину поля в mysql, как это делается для типа varchar. А означает лишь длину вывода. Причём только тогда, когда у столбца задан аттрибут ZEROFILL.
Т.е. число в скобках никак не влияет на максимально возможное значение типа int.
Рассмотрим на примере. Вот как будут выводиться числа для поля INT(2) unsigned:
//INT(2) UNSIGNED:
1
2
..
98
99
..
9999
10000
Вот как будут выводиться числа для поля INT(2) unsigned zerofill:
//INT(2) UNSIGNED ZEROFILL:
01
02
...
09
...
99
100
...
10000
//INT(4) UNSIGNED ZEROFILL:
0001
0002
...
0009
...
0099
0100
...
9999
10000
Т.е. суть в том, что для ZEROFILL будут отображаться нули слева, формируя заданную в скобочках длину вывода. Если длина строкового представления числа меньше размера вывода (размера, указанного в скобках), то строковое представление числа будет дополнено нулями слева до требуемой длины.
Еще пару реальных sql-примеров с int и zerofill:
CREATE TABLE test_int (
id1 INT UNSIGNED,
id2 INT(2) UNSIGNED,
id3 INT(10) UNSIGNED,
id4 INT(2) UNSIGNED ZEROFILL,
id5 INT(10) UNSIGNED ZEROFILL
);
mysql> show create table test_int;
CREATE TABLE `test_int` (
`id1` int(10) unsigned DEFAULT NULL,
`id2` int(2) unsigned DEFAULT NULL,
`id3` int(10) unsigned DEFAULT NULL,
`id4` int(2) unsigned zerofill DEFAULT NULL,
`id5` int(10) unsigned zerofill DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
INSERT INTO test_int VALUES
(1, 1, 1, 1, 1),
(333,333,333,333,333);
mysql> select * from test_int;
+------+------+------+------+------------+
| id1 | id2 | id3 | id4 | id5 |
+------+------+------+------+------------+
| 1 | 1 | 1 | 01 | 0000000001 |
| 333 | 333 | 333 | 333 | 0000000333 |
+------+------+------+------+------------+
2 rows in set (0,01 sec)