Каков размер столбца int(11)
в mysql в байтах?
А максимальное значение, которое можно хранить в этих столбцах?
mysql
до моего приезда. Thx
Каков размер столбца int(11)
в mysql в байтах?
А максимальное значение, которое можно хранить в этих столбцах?
mysql
до моего приезда. Thx
Ответы:
Значение INT
всегда будет 4 байта независимо от того, какая длина указана.
TINYINT
= 1 байт (8 бит)SMALLINT
= 2 байта (16 бит)MEDIUMINT
= 3 байта (24 бита)INT
= 4 байта (32 бита)BIGINT
= 8 байт (64 бита).Длина просто указывает, сколько символов нужно дополнить при выборе данных с помощью клиента командной строки mysql. 12345, сохраненное как int(3)
, по-прежнему будет отображаться как 12345, но если оно будет сохранено, int(10)
оно будет отображаться как 12345, но у вас будет возможность дополнить первые пять цифр. Например, если вы добавили, ZEROFILL
он будет отображаться как 0000012345.
... и максимальное значение будет 2147483647 (без подписи) или 4294967295 (без подписи)
INT ( x ) будет иметь значение только с точки зрения отображения , то есть показывать число в x разрядах, а не ограничиваться 11. Вы соединяете его, используя ZEROFILL
, что будет добавлять нули до тех пор, пока оно не будет соответствовать вашей длине.
Итак, для любого числа х вINT(x)
если сохраненное значение имеет меньше цифр, чем x , ZEROFILL
будет добавляться ноль.
INT (5) ZEROFILL с сохраненным значением 32 покажет 00032
INT (5) с сохраненным значением 32 покажет 32
INT с сохраненным значением 32 покажет 32
если сохраненное значение имеет больше цифр, чем x , оно будет показано как есть.
INT (3) ZEROFILL с сохраненным значением 250000 покажет 250000
INT (3) с сохраненным значением 250000 покажет 250000
INT с сохраненным значением 250000 покажет 250000
Фактическое значение, хранящееся в базе данных, не изменяется, размер остается тем же, и любые вычисления будут вести себя нормально.
Это также относится к BIGINT, MEDIUMINT, SMALLINT и TINYINT.
ZEROFILL
.
Согласно здесь , int(11)
потребуется 4 байта пространства, что составляет 32 бита пространства с 2^(31) = 2147483648
максимальным значением и -2147483648
минимальным значением. Один бит для знака.
Как уже говорили другие, минимальные / максимальные значения, которые может хранить столбец, и объем памяти, который он занимает в байтах, определяется только типом, а не длиной.
Многие из этих ответов говорят, что (11)
часть влияет только на ширину экрана, что не совсем верно, но в основном.
Определение int(2)
с не ZEROFILL указанного будет:
100
100
когда вывод (не 0
или 00
)Единственное, что нужно (2)
будет сделать, это указать также zerofill :
1
будет показано 01
.Лучший способ увидеть все нюансы - запустить:
CREATE TABLE `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`int1` int(10) NOT NULL,
`int2` int(3) NOT NULL,
`zf1` int(10) ZEROFILL NOT NULL,
`zf2` int(3) ZEROFILL NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `mytable`
(`int1`, `int2`, `zf1`, `zf2`)
VALUES
(10000, 10000, 10000, 10000),
(100, 100, 100, 100);
select * from mytable;
который выведет:
+----+-------+-------+------------+-------+
| id | int1 | int2 | zf1 | zf2 |
+----+-------+-------+------------+-------+
| 1 | 10000 | 10000 | 0000010000 | 10000 |
| 2 | 100 | 100 | 0000000100 | 100 |
+----+-------+-------+------------+-------+
Этот ответ проверен на MySQL 5.7.12 для Linux и может отличаться или не изменяться для других реализаций.
Каков размер столбца int (11) в mysql в байтах?
(11)
- этот атрибут типа int
данных не имеет ничего общего с размером столбца. Это просто ширина отображения целочисленного типа данных. С 11.1.4.5. Атрибуты числового типа :
MySQL поддерживает расширение для необязательного указания ширины отображения целочисленных типов данных в скобках после базового ключевого слова для типа. Например, INT (4) определяет INT с шириной отображения четырех цифр.
Хорошее объяснение этому можно найти здесь.
Подводя итог: число 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.
Хотя этот ответ вряд ли можно увидеть, я думаю, что стоит сделать следующее уточнение:
БИТ ДЕТАЛИ,
ширина дисплея, по-видимому, предназначена для предоставления метаданных о том, сколько нулей отображать в заполненном нулями числе.
Это на самом деле не ограничивает длину числа, возвращаемого запросом, если это число превышает указанную ширину экрана.
Чтобы узнать, какая длина / ширина фактически разрешена для целочисленного типа данных в MySQL, смотрите список и ссылку: ( типы: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT );
Таким образом, сказав выше, вы можете ожидать, что ширина экрана не повлияет на результаты стандартного запроса, если только столбцы не заданы как столбцы ZEROFILL
ИЛИ
в случае, когда данные загружаются в приложение и это приложение собирает данные. ширина отображения, чтобы использовать для некоторого другого вида отступов.
Основная ссылка: https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean
n
, так что ... да, это чушь. Это только делает что-нибудь с zerofill.
В 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
согласно этой книге :
MySQL позволяет указать «ширину» для целочисленных типов, таких как INT (11). Это бессмысленно для большинства приложений: оно не ограничивает допустимый диапазон значений, а просто указывает количество символов, которые интерактивные инструменты MySQL будут резервировать для целей отображения. Для хранения и вычисления INT (1) идентичен INT (20).