Провёл опрос знакомых разработчиков. По результатам выяснилось, что документация MySQL совсем не помогает понять, что же такое N в типе данных int(N).
Если вы думаете, что это размер хранимых данных в байтах или символах, то это не так. В int(1) запросто можно записать 2147483647.
Если вы думаете, что это максимальное количество символов, которое база вам покажет при SELECT, то это, опять же, не совсем так.
CREATE TABLE `test` ( `number` int(3) DEFAULT NULL, `zerofill_number` int(3) unsigned zerofill DEFAULT NULL ); INSERT INTO test (number, zerofill_number) VALUES (123456789, 123456789), (1, 1); SELECT * FROM test;
На выходе получим:
number | zerofill_number
---------------------------
123456789 | 123456789
1 | 001
То есть в случае int(3) DEFAULT NULL у нас (3) вообще ни на что не повлиял (разве что MySQL будет материться на непонятном языке при попытке добавить FK, где с другой стороны, например, int(11)).
В случае же int(3) unsigned zerofill DEFAULT NULL получаем аналог PHP-шного str_pad. То есть, если при преобразовании значения в строку эта самая строка короче N, то она добивается слева нулями до длины N.
И в том и в другом случае размер данных никак не меняется.


