Провёл опрос знакомых разработчиков. По результатам выяснилось, что документация 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
.
И в том и в другом случае размер данных никак не меняется.