Який розмір стовпця int (11) у mysql у байтах?


488

Який розмір стовпця int(11)у mysql у байтах?

І Максимальне значення, яке можна зберігати в цих стовпцях?


1
Можливий дублікат Якого розміру SQL Int (N)?
cellepo

1
@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 (без підпису)


111
то що тут значення 11 в int (11).
Гаурав

73
У стовпці INT (4), ціле число 1 відображатиметься як 0001 ТОЛЬКО, якщо стовпець також буде вказаний як нульове заповнення. В іншому випадку він буде просто відображатися як номер 1, без зайвих цифр. @Gaurav - не змішуй, як mysql відображає дані та як їх зберігає, це дві різні речі. Те, що ви бачите, - це не те, що воно може бути насправді.
Майкл СП

13
@Michael Вау, справді цікаво. Отже, якщо ви створите стовпець 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) Варто зазначити, що цих довжин за замовчуванням достатньо для відображення будь-якого числа, Ви можете зберігати в цьому полі (напр .: maxint max значення 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.


49
Отже, довжина не робить нічого, якщо ви не використовуєте zerofill?
розробникbmw

29
@developerbmw - Правильно. Довжина не робить нічого, якщо ви не використовуєте ZEROFILL.
Рік Джеймс

ZEROFILL - це, по суті, режим сумісності з мейнфреймом.
Хенк Полі

114

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


1
У вашому прикладі 9 дев'яток. Чи можете ви підтвердити, що ваш приклад правильний? Якщо так, то чому він пише 10, коли є 9 дев'яток? Чи кількість цифр плюс одна плюс знак знака?
Homer6

5
Ні, максимальне число - 4294967295, якщо не підписано int, тобто 2 ^ 32. Кількість у дужках не впливає на тип зберігання. Якщо вам потрібно більше 2 ^ 32, вам потрібно перейти до bigint.
Kieran Tully

7
А точніше, (2 ^ 32) -1.
Kieran Tully

2
+ Кіран має рацію. Максимальне число відрізняється від відповіді. Дивіться тут
daviewales

38

Як говорили інші, мінімальне / максимальне значення, яке може зберігати стовпець, і скільки місця займає в байтах, визначається лише типом, а не довжиною.

Багато з цих відповідей говорять про те, що (11)частина впливає лише на ширину дисплея, що не зовсім відповідає дійсності, але в основному.

Визначення int(2)з НЕ ZEROFILL зазначеного буде:

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

Єдине, що (2)буде зроблено, це якщо вказано також нульове заповнення :

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

Найкращий спосіб побачити всі нюанси - це запустити:

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 і може відрізнятися від інших реалізацій.


5
"Зверніть увагу, як стовпець int1 має набагато меншу ширину відображення, ніж zerofill2, хоча довжина більша" ... Ем, це лише тому, що назва стовпця 'zerofill2' становить 9 знаків, а 'int1' - 4.
neokio

2
... так, так очевидно, що довжина не впливає навіть на ширину дисплея, коли нульове заповнення не ввімкнено. Інакше int1 буде набагато ширшим, натомість ширина 10 символів.
Programster

2
Гарне пояснення з ґрунтовним прикладом. Шлях краще відповісти, ніж прийнятий. Дякую @Programster
Корін

Незначна нітка: Як вказує neokio, з цього запиту не можна спостерігати точні наслідки "int (3)" з нульовим заповненням. Скоротіть назву стовпця на "zf2", щоб зробити поведінку зрозумілішою. Зокрема, чи правда, чи неправда [у даній версії БД], що "(з нульовим заповненням) При відображенні значень стовпець завжди матиме ширину максимально можливого значення, яке може приймати стовпець, що становить 10 цифр для цілого числа",
ToolmakerSteve

1
Щоб уточнити коментар neokio та мій незначний коментар nit: Речення "Зауважте, як колонка 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 із шириною відображення у чотири цифри.


19

Хороше пояснення цьому можна знайти тут

Для підсумовування: Число 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 - погодьтеся, "кількість рядків" не має значення для більшості стовпців. Доречно лише для стовпчика первинного ключа з автоматичним збільшенням.
ToolmakerSteve

10

Хоча цю відповідь навряд чи вдасться побачити, я вважаю, що варто зробити таке уточнення:

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

БІТА ДЕТАЛІ
ширина дисплея, мабуть, призначена для надання метаданих про те, скільки нулів відобразити в нульовому заповненому числі.
Він фактично НЕ обмежує довжину числа, поверненого із запиту, якщо це число перевищує вказану ширину відображення.
Щоб знати, яка довжина / ширина насправді дозволена для цілого типу даних у MySQL, див. Список та посилання: ( типи: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT );
Отже, сказавши вище, ви можете очікувати, що ширина відображення не вплине на результати стандартного запиту, якщо тільки стовпці не вказані як стовпці ZEROFILL
АБО
у випадку, якщо дані перетягуються в додаток, і якщо програма збирає ширина дисплея, яка використовується для деяких інших типів оббивки.

Основна довідка: https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean


Дякуємо, що надали правильну відповідь. Я намагався з командного рядка MySQL, і я не міг змусити його знімати цифри з малого n, так що ... так, це булкрап. З нульовим заповненням він робить що завгодно.
квітня 1616

@mpen рада, що можу допомогти, це було пов’язано з чимось, що я намагався, і подумав, що я можу тут докладати більше деталей, які можуть бути корисні комусь іншому.
МЕР

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


0

відповідно до цієї книги :

MySQL дозволяє задати "ширину" для цілих типів, таких як INT (11). Це безглуздо для більшості застосунків: воно не обмежує юридичний діапазон значень, а просто вказує кількість символів Інтерактивні інструменти MySQL будуть зарезервовані для відображення. Для зберігання та обчислювальних цілей INT (1) ідентичний INT (20).


-4

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


2
Це 2147483647, тому що має знак.
d3bit

-9

4294967295 - це відповідь, оскільки в int (11) показано максимум 11 цифр IMO

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.