@cellepo один является общим sql, другой специфичен для mysql (плюс этот имеет гораздо больше просмотров). Если вы хотите пойти на двойную охоту и заставить меня быстро закрыть их одним голосом, посетите чат SOBotics и пингуйте меня. Но тот, кого нужно закрыть, должен быть помечен mysqlдо моего приезда. Thx
Дрю
6
Эй, ребята. Возможно, это дубликат, но он более удобен для поиска. Большинство людей делают поиск таким образом, используя int (11). и это решение вопросов других людей. Вы можете проверить его количество просмотров по сравнению с другим. и пользователь найдет более подробный ответ здесь.
Гаурав
Ответы:
685
Значение 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 (4), целое число 1 будет отображаться ТОЛЬКО как 0001, если столбец также был указан как нулевое заполнение. В противном случае он будет отображаться как номер 1 без дополнительных цифр. @Gaurav - не смешивайте, как mysql отображает данные и как они их хранят, это две разные вещи. То, что вы видите, не то, чем оно может быть на самом деле.
Michael JV
13
@ Майкл Вау, действительно интересно. Таким образом, если вы создадите столбец INT (3) и сохраните значение 5001, он сохранит 5001, но отобразит только 1. Я этого не знал.
andrewtweber
16
@andrewtweber: 5001будет отображаться так, как 5001будто поле определено как INT(3). Смотрите ответ @priyabagus ниже и здесь .
go2null
10
Если вы не предоставите длину для целочисленных полей, MySQL установит значение по умолчанию (tinyint 4, smallint 6, mediumint 9, int 11, bigint 20). Стоит отметить, что этих значений по умолчанию достаточно для отображения любого числа, которое может храниться в этом поле (например, максимальное значение smallint равно 2 ^ 16 = 65536, 5 цифр). Если у вас нет веских причин поступить иначе, я бы рекомендовал оставить размеры по умолчанию, чтобы избежать неприятных сюрпризов.
Тибо
167
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?
developerbmw
29
@developerbmw - Правильно. Длина абсолютно ничего не делает, если вы не используете ZEROFILL.
Рик Джеймс
ZEROFILL - это режим совместимости с мэйнфреймами.
Хенк Поли
114
Согласно здесь , int(11)потребуется 4 байта пространства, что составляет 32 бита пространства с 2^(31) = 2147483648максимальным значением и -2147483648минимальным значением. Один бит для знака.
В вашем примере 9 девяток. Можете ли вы подтвердить, что ваш пример правильный? Если это так, почему он говорит, что 10, когда есть 9 девяток? Количество цифр плюс один плюс знак?
Homer6
5
Нет, максимальное число равно 4294967295, если без знака int, то есть 2 ^ 32. Число в скобках не влияет на тип хранилища. Если вам нужно больше 2 ^ 32, вам нужно перейти на bigint.
Киран Талли
7
Вернее, (2 ^ 32) -1.
Киран Талли
2
+ Киран прав. Максимальное число отличается от указанного в ответе. Смотрите здесь
daviewales
38
Как уже говорили другие, минимальные / максимальные значения, которые может хранить столбец, и объем памяти, который он занимает в байтах, определяется только типом, а не длиной.
Многие из этих ответов говорят, что (11)часть влияет только на ширину экрана, что не совсем верно, но в основном.
Определение int(2)с не ZEROFILL указанного будет:
по-прежнему принимать значение 100
по-прежнему отображать значение, 100когда вывод (не 0или 00)
ширина дисплея будет ширина наибольшего значения выводится из запроса на выборку.
Единственное, что нужно (2)будет сделать, это указать также zerofill :
значение 1будет показано 01.
При отображении значений столбец всегда будет иметь ширину максимально возможного значения, которое может принять столбец, что составляет 10 цифр для целого числа, вместо минимальной ширины, необходимой для отображения наибольшего значения, которое должен отображать столбец в этом конкретном запросе выбора. , который может быть намного меньше.
Столбец все еще может принимать и показывать значение, превышающее длину, но эти значения не будут иметь префикс 0.
«Обратите внимание, что столбец int1 имеет гораздо меньшую ширину экрана, чем zerofill2, даже если длина больше» ... Э-э, это только потому, что имя столбца «zerofill2» имеет длину 9 символов, а «int1» равно 4.
neokio
2
... да, ясно, что длина не влияет, даже на ширину дисплея, когда нулевое заполнение не включено. В противном случае int1 будет намного шире с шириной 10 символов.
Programster
2
Хорошее объяснение с солидным примером. Гораздо лучший ответ, чем принятый. Спасибо @Programster.
Корин
Незначительная гнида: как указывает Неокио, из этого запроса нельзя наблюдать точные последствия "int (3)" с нулевым заполнением. Сократите имя столбца до «zf2», чтобы сделать поведение более понятным. В частности, true или false [для данной версии БД], что "(с нулевым заполнением) При отображении значений столбец всегда будет иметь ширину максимально возможного значения, которое может принимать столбец, что составляет 10 цифр для целого числа",
ToolmakerSteve
1
Чтобы прояснить комментарий neokio и мой незначительный комментарий: предложение «Обратите внимание, что столбец int1 имеет гораздо меньшую ширину отображения, чем zerofill2, даже если длина больше». должны быть удалены из ответа. Это является следствием количества символов в заголовке слова «zerofill2» - оно не имеет ничего общего с тестированием ширины экрана. Лучше дать этому столбцу более короткое имя, например, "zf2". Тогда у нас будет таблица, в которой «int1, int2 и zf2 имеют абсолютно одинаковую ширину, хотя int2 и zf2 задают небольшую ширину (3)».
ToolmakerSteve
32
Каков размер столбца 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.
@OldGeezer - согласитесь, «количество строк» не имеет значения для большинства столбцов. Относится только к автоинкрементному столбцу первичного ключа (id).
ToolmakerSteve
10
Хотя этот ответ вряд ли можно увидеть, я думаю, что стоит сделать следующее уточнение:
(n) за целочисленным типом данных в MySQL указывает ширину экрана
ширина дисплея НЕ ограничивает длину числа, возвращаемого запросом
ширина отображения ДОЛЖНА ограничивать количество заполненных нулями столбцов, заполненных нулями, поэтому общее число соответствует ширине отображения (при условии, что фактическое число не превышает ширину отображения, и в этом случае число отображается как есть)
ширина дисплея также полезна для разработчиков, чтобы узнать, к какой длине должно быть добавлено значение
БИТ ДЕТАЛИ,
ширина дисплея, по-видимому, предназначена для предоставления метаданных о том, сколько нулей отображать в заполненном нулями числе.
Это на самом деле не ограничивает длину числа, возвращаемого запросом, если это число превышает указанную ширину экрана.
Чтобы узнать, какая длина / ширина фактически разрешена для целочисленного типа данных в MySQL, смотрите список и ссылку: ( типы: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT );
Таким образом, сказав выше, вы можете ожидать, что ширина экрана не повлияет на результаты стандартного запроса, если только столбцы не заданы как столбцы ZEROFILL
ИЛИ
в случае, когда данные загружаются в приложение и это приложение собирает данные. ширина отображения, чтобы использовать для некоторого другого вида отступов.
Спасибо за правильный ответ. Я пытался из командной строки MySQL, и я не мог заставить его отбрасывать какие-либо цифры маленькими n, так что ... да, это чушь. Это только делает что-нибудь с zerofill.
mpen
@mpen рад, что смог помочь, это было связано с чем-то, что я пытался, и подумал, что мог бы разместить здесь более подробную информацию, которая может быть полезна для кого-то еще.
MER
9
В 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).
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 (без подписи)
источник
5001
будет отображаться так, как5001
будто поле определено какINT(3)
. Смотрите ответ @priyabagus ниже и здесь .INT ( x ) будет иметь значение только с точки зрения отображения , то есть показывать число в x разрядах, а не ограничиваться 11. Вы соединяете его, используя
ZEROFILL
, что будет добавлять нули до тех пор, пока оно не будет соответствовать вашей длине.Итак, для любого числа х в
INT(x)
если сохраненное значение имеет меньше цифр, чем x ,
ZEROFILL
будет добавляться ноль.если сохраненное значение имеет больше цифр, чем x , оно будет показано как есть.
Фактическое значение, хранящееся в базе данных, не изменяется, размер остается тем же, и любые вычисления будут вести себя нормально.
Это также относится к 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
.Лучший способ увидеть все нюансы - запустить:
который выведет:
Этот ответ проверен на MySQL 5.7.12 для Linux и может отличаться или не изменяться для других реализаций.
источник
(11)
- этот атрибут типаint
данных не имеет ничего общего с размером столбца. Это просто ширина отображения целочисленного типа данных. С 11.1.4.5. Атрибуты числового типа :источник
Хорошее объяснение этому можно найти здесь.
Подводя итог: число 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
источник
согласно этой книге :
источник
Я думаю, что максимальное значение int (11) составляет 4294967295
источник
4294967295 является ответом, потому что int (11) показывает максимум 11 цифр IMO
источник