11 ответов:
An
INTвсегда будет 4 байта независимо от того, какая длина указана.
TINYINT= 1 байт (8 бит)SMALLINT= 2 байта (16 бит)MEDIUMINT= 3 байта (24 бит)INT= 4 байта (32 бита)BIGINT= 8 байт (64 бит).длина просто указывает, сколько символов для отображения при выборе данных с клиентом командной строки mysql.
... и максимум значение будет 2147483647 (подпись) или 4294967295 (без знака)
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.
По данным здесь,
int(11)займет 4 байта пространства, то есть 32 бита пространства с2^(31) = 2147483648максимальное значение и-2147483648мин.значение Один бит для знака.
как уже говорили другие, минимальные/максимальные значения, которые может хранить столбец, и сколько памяти он занимает в байтах, определяются только типом, а не длиной.
многие из этих ответов говорят, что
(11)часть влияет только на ширину экрана, что не совсем верно, но в основном.определение
int(2)С zerofill не указан будет:
- по-прежнему принимать значение
100- еще дисплей значение
100при выходе (не0или00)- the ширина дисплея будет ширина наибольшего значения, выводимого из запроса SELECT.
только
(2)будет если zerofill также указан:
- значение
1будет отображаться01.- при отображении значений, столбец всегда будет иметь ширина максимально возможное значение столбец может принимать это 10 цифр для целого числа, а не ширина miniumum, необходимая для отображения наибольшего значения, которое столбец должен показать в этом конкретном запросе select, который может быть намного меньше.
- столбец все еще может принимать и показывать значение, превышающее длину, но эти значения не будут иметь префикса 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 и может или не может отличаться для других реализаций.
каков размер столбца int (11) в mysql в байтах?
(11)- это атрибутintтип данных не имеет ничего общего с размером столбца. Это просто ширина отображения целочисленного типа данных. От 11.1.4.5. Атрибуты Числового Типа:MySQL поддерживает расширение для дополнительного указания отображения ширина целочисленных типов данных в скобках после ключевого слова base для типа. Например, INT (4) определяет INT с дисплеем ширина четырех цифр.
хорошее объяснение этому можно найти здесь
подводя итог: число в скобке в int(N) часто путают с максимальным размером, разрешенным для столбца, как это происходит в случае varchar(N).
но это не относится к целочисленным типам данных -число 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 байт.для получения дополнительной информации о размере/диапазоне целочисленных типов см. MySQL Manual
хотя этот ответ вряд ли будет замечен, я думаю, что стоит сделать следующее уточнение:
- (n) за целочисленным типом данных в MySQL определяет ширину отображения
- ширина отображения не ограничивает длину числа, возвращаемого из запроса
- ширина отображения ограничивает количество нулей, заполненных для столбца с нулевым заполнением, поэтому общее число соответствует ширине отображения (если фактическое число не превышает ширина дисплея, в этом случае число отображается как есть)
- ширина дисплея также предназначена в качестве полезного инструмента для разработчиков, чтобы знать, какую длину значение должно быть дополнено до
НЕМНОГО ДЕТАЛЕЙ
ширина отображения, по-видимому, предназначена для предоставления некоторых метаданных о том, сколько нулей должно отображаться в нулевом заполненном числе.
Это фактически не ограничивает длину числа, возвращаемого из запроса, если это число превышает задана ширина дисплея.
Чтобы узнать, какая длина / ширина фактически разрешена для целочисленного типа данных в MySQL, см. список и ссылку: (типы: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT);
Таким образом, сказав выше, вы можете ожидать, что ширина отображения не повлияет на результаты стандартного запроса, если столбцы не указаны как столбцы ZEROFILL
Или
в случае, если данные втягиваются в приложение и это приложение собирает ширина дисплея для использования для некоторых других видов заполнения.основная ссылка:https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean
в 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
int(11)означает, что в MySQL столбец int может хранить максимальное целочисленное значение с длиной 11 цифр. Однако это не так. в int (11), 11-этоdisplay widthв целочисленном столбце, В отличие от Столбцов символов, где число означает количество символов, которые могут быть сохранены. нажмите здесь, чтобы прочитать больше
Comments