Каков размер столбца int (11) в mysql в байтах?

303

Каков размер столбца int(11) в mysql в байтах?

И Максимальное значение, которое может быть сохранено в этих столбцах?

  • 1
    Возможный дубликат Каков размер SQL Int (N)?
  • 0
    @cellepo один является общим sql, другой специфичен для mysql (плюс этот имеет гораздо больше просмотров). Если вы хотите пойти на двойную охоту и заставить меня быстро закрыть их одним голосом, посетите чат SOBotics и пингуйте меня. Но тот, кого нужно закрыть, должен быть помечен mysql до моего приезда. Спасибо
Показать ещё 1 комментарий
Теги:
types
int

10 ответов

419
Лучший ответ

INT всегда будет 4 байта независимо от того, какая длина указана.

  • TINYINT = 1 байт (8 бит)
  • SMALLINT = 2 байта (16 бит)
  • MEDIUMINT = 3 байта (24 бит)
  • INT = 4 байта (32 бит)
  • BIGINT = 8 байт (64 бит).

Длина просто указывает, сколько символов будет отображаться при выборе данных с помощью клиента командной строки mysql.

... и максимальное значение будет равно 2147483647 (Подпись) или 4294967295 (Без знака)

  • 76
    тогда что означает значение 11 в int (11) здесь.
  • 4
    @Gaurav, возможно, 10 дюймов с - до этого.
Показать ещё 13 комментариев
93

В соответствии с здесь, int(11) будет занимать 4 байта пространства, которое составляет 32 бита пространства с максимальным значением 2^(31) = 2147483648 и -2147483648 min значение. Один бит для знака.

  • 1
    В вашем примере 9 девяток. Можете ли вы подтвердить, что ваш пример правильный? Если так, то почему он говорит, что 10, когда есть 9 девяток? Количество цифр плюс один плюс знак?
  • 5
    Нет, максимальное число равно 4294967295, если без знака int, то есть 2 ^ 32. Число в скобках не влияет на тип хранилища. Если вам нужно больше 2 ^ 32, вам нужно перейти на bigint.
Показать ещё 2 комментария
68

INT (somenumber) будет делать разницу только в терминах отображения, то есть указывать цифры в цифрах "somenumber" и не ограничиваться только 11. Но значение, хранящееся в базе данных, равно не затронуты.

Обратите внимание, что:

  • если значение имеет меньшую цифру, чем "somenumber" , вам нужно использовать атрибут ZEROFILL, иначе нет никакой разницы.

    INT (5) ZEROFILL с сохраненным значением 32 покажет 00032
    INT (5) с сохраненным значением 32 покажет 32
    INT с сохраненным значением 32 покажет 32

  • если значение имеет больше цифры, чем "somenumber" , тогда будет показано сохраненное значение.

    INT (3) с сохраненным значением 250000 покажет 250000

  • 36
    Таким образом, длина абсолютно ничего не делает, если вы не используете zerofill?
  • 14
    @developerbmw - Правильно. Длина абсолютно ничего не делает, если вы не используете ZEROFILL .
28

Каков размер столбца int (11) в mysql в байтах?

(11) - этот атрибут типа данных int не имеет никакого отношения к размеру столбца. Это просто ширина отображения целочисленного типа данных. Из 11.1.4.5. Атрибуты числового типа:

MySQL поддерживает расширение для необязательного указания отображения ширина целых типов данных в круглых скобках, следующих за ключевым словом base для типа. Например, INT (4) указывает INT с дисплеем ширина четырех цифр.

23

Как говорили другие, минимальные/максимальные значения, которые может хранить столбец, и сколько памяти он занимает в байтах, определяется только типом, а не длиной.

Многие из этих ответов говорят о том, что часть (11) влияет только на ширину отображения, которая не совсем верна, но в основном.

Определение int(2) с без нулевого значения:

  • по-прежнему принимать значение 100
  • отображать значение 100 при выводе (не 0 или 00)
  • ширина экрана будет шириной наибольшего значения, выводимого из запроса выбора.

Единственное, что сделает (2), это , если также указано значение zerofill:

  • будет показано значение 1 01.
  • При отображении значений столбец всегда будет иметь ширину максимально возможного значения, которое столбец мог бы принимать, что составляет 10 цифр для целого числа, вместо ширины miniumum, необходимой для отображения наибольшего значения, которое столбец должен отображаться в этом конкретном запросе выбора, который может быть намного меньше.
  • Столбец все равно может принимать и показывать значение, превышающее длину, но эти значения не будут иметь префикс с 0s.

Лучший способ увидеть все нюансы:

CREATE TABLE `mytable` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `int1` int(10) NOT NULL,
    `int2` int(3) NOT NULL,
    `zerofill1` int(10) ZEROFILL NOT NULL,
    `zerofill2` int(3) ZEROFILL NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `mytable` 
(`int1`, `int2`, `zerofill1`, `zerofill2`) 
VALUES
(10000, 10000, 10000, 10000),
(100, 100, 100, 100);

select * from mytable;

который выведет:

+----+-------+-------+------------+-----------+
| id | int1  | int2  | zerofill1  | zerofill2 |
+----+-------+-------+------------+-----------+
|  1 | 10000 | 10000 | 0000010000 |     10000 |
|  2 |   100 |   100 | 0000000100 |       100 |
+----+-------+-------+------------+-----------+

Обратите внимание, что столбец int1 имеет гораздо меньшую ширину отображения, чем zerofill2, даже если длина больше.

Этот ответ протестирован против MySQL 5.7.12 для Linux и может отличаться или не изменяться для других реализаций.

  • 4
    «Обратите внимание, что столбец int1 имеет гораздо меньшую ширину экрана, чем zerofill2, даже если длина больше» ... Э-э, это только потому, что имя столбца «zerofill2» имеет длину 9 символов, а «int1» равно 4.
  • 2
    ... да, ясно, что длина не влияет, даже на ширину дисплея, когда нулевое заполнение не включено. В противном случае int1 будет гораздо шире с шириной 10 символов.
Показать ещё 2 комментария
10

Хорошее объяснение этого можно найти здесь Подводя итог: число в скобке в int (N) часто путается максимальным размером, разрешенным для столбца, как это имеет место в случае varchar (N).

Но это не относится к типам данных Integer - число N в скобке - это не максимальный размер для столбца, а просто параметр, чтобы сообщить MySQL, какую ширину отображать столбец при данные таблицы просматриваются через консоль MySQL (когда вы используете атрибут ZEROFILL).

Число в скобках подскажет MySQL, сколько нулей для ввода входящих целых чисел. Например: если вы используете ZEROFILL в столбце, который установлен в INT (5), а число 78 вставлено, MySQL будет заполнять это значение нулями до тех пор, пока число не удовлетворит число в скобках. т.е. 78 станет 00078, а 127 станет 00127. Подводя итог: число в скобках используется для показа. В некотором смысле, число в скобках является бесполезным, если вы не используете атрибут ZEROFILL. Таким образом, размер для int останется таким же, т.е. -2147483648 до 2147483648 для подписанных и от 0 до 4294967295 для unsigned (~ 2,15 миллиарда и 4,2 миллиарда долларов, что является одной из причин, почему разработчики не помните историю, стоящую за номером N в скобках, так как она практически не влияет на базу данных, если она содержит более 2 миллиардов строк), а в байтах - 4 байта.

Для получения дополнительной информации о размере/диапазоне типов Integer см. Руководство по MySQL

  • 0
    Почему в игру вступает количество строк?
  • 0
    @OldGeezer - согласитесь, «количество строк» не имеет значения для большинства столбцов. Относится только к автоинкрементному столбцу первичного ключа (id).
8

Хотя этот ответ вряд ли будет замечен, я думаю, что следующее разъяснение стоит сделать:

  • (n) за целым типом данных в MySQL указывается ширина отображения
  • ширина экрана НЕ ограничивает длину числа, возвращаемого из запроса
  • ширина экрана. Ограничивает количество нулей, заполненных для столбца с нулевым заполнением, поэтому общее число соответствует ширине отображения (пока фактическое число не превышает ширину отображения, и в этом случае номер отображается как есть)
  • ширина экрана также используется как полезный инструмент для разработчиков, чтобы узнать, какую длину значение должно быть добавлено к

БИТ ДЕТАЛИ
ширина видимости, по-видимому, предназначена для предоставления некоторых метаданных о том, сколько нулей будет отображаться в нулевом заполненном номере.
Он фактически не ограничивает длину числа, возвращаемого из запроса, если это число превышает указанную ширину отображения.
Чтобы узнать, какая длина/ширина фактически разрешена для целочисленного типа данных в MySQL, см. Список и ссылку: (types: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT);
Поэтому, сказав выше, вы можете ожидать, что ширина экрана не повлияет на результаты стандартного запроса, если только столбцы не указаны как столбцы ZEROFILL
ИЛИ
в случае, когда данные втягиваются в приложение, и это приложение собирает ширину отображения для использования для какого-либо другого типа заполнения.

Основная ссылка: https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean

  • 0
    Спасибо за правильный ответ. Я пытался из командной строки MySQL, и я не мог заставить его отбрасывать любые цифры с маленьким n , так что ... да, это чушь. Это только делает что-нибудь с zerofill.
  • 0
    @mpen рад, что смог помочь, это было связано с чем-то, что я пытался, и подумал, что мог бы разместить здесь более подробную информацию, которая может быть полезна для кого-то еще.
2

В MySQL integer int(11) размер составляет 4 байта, что равно 32 бит.

Подписанное значение: - 2^(32-1) to 0 to 2^(32-1)-1          = -2147483648 to 0 to 2147483647

Неподписанные значения: 0 to 2^32-1                = 0 to 4294967295

-6

Я думаю, что максимальное значение int (11) равно 4294967295

  • 2
    Это 2147483647, потому что у него есть знак.
-9

4294967295 - это ответ, потому что int (11) показывает максимум 11 цифр IMO

Ещё вопросы

Сообщество Overcoder
Наверх
Меню