<rmcreative>

RSS

Все заметки с тегами «int, length»

Можно уточнить:

    (1)
  1. MySQL, длина int

    24 сентября 2012

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

    И в том и в другом случае размер данных никак не меняется.

    12 комментариев