Каков размер столбца int (11) в mysql в байтах? - PullRequest
433 голосов
/ 12 апреля 2011

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

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

Ответы [ 11 ]

602 голосов
/ 12 апреля 2011

Значение INT всегда будет 4 байта независимо от заданной длины.

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

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

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

135 голосов
/ 17 декабря 2014

INT ( somenumber ) будет иметь значение только в терминах отображения , то есть в числе в цифрах ' somenumber ', без ограничений только до 11. Вы соединяете его, используя ZEROFILL, который будет добавлять нули до тех пор, пока он не будет соответствовать вашей длине

Обратите внимание, что значение, хранящееся в базе данных, не изменяется, любые вычисления будут вести себя как есть.

Примечания:

  • если значение имеет меньше цифр, чем ' somenumber ', ZEROFILL будет предшествовать нулям.

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

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

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

Аналогичное применимо также к BIGINT, MEDIUMINT, SMALLINT и TINYINT.

102 голосов
/ 12 апреля 2011

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

31 голосов
/ 12 июня 2016

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

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

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

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

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

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

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

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 и может отличаться или не изменяться для других реализаций.

31 голосов
/ 07 марта 2013

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

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

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

18 голосов
/ 19 апреля 2016

Хорошее объяснение этому можно найти здесь

Подводя итог: число N в 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 для беззнаковых (~ 2,15 миллиарда и 4,2 миллиарда, что является одной из причин, почему разработчики до сих пор не знают, что за скобками стоит номер N, поскольку он вряд ли повлияет на базу данных, если в ней не будет более 2 миллиардов строк), а в байтах это будет 4 байта .

Подробнее о размере / диапазоне целочисленных типов см. В MySQL Manual

10 голосов
/ 17 января 2016

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

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

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

Первичная ссылка: https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean

5 голосов
/ 20 декабря 2015

В MySQL целое число 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

0 голосов
/ 14 октября 2018

согласно этой книге :

MySQL позволяет указать «ширину» для целочисленных типов, таких как INT (11). Это бессмысленно для большинства приложений: оно не ограничивает допустимый диапазон значений, но просто указывает количество символов Интерактивные инструменты MySQL будут зарезервированы для отображения. За В целях хранения и вычислений INT (1) идентичен INT (20).

0 голосов
/ 05 марта 2015

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...