Подтвердить что ты не робот

Int (11) против int (что-то еще)

Я новичок в веб-программировании и занимаюсь различными учебниками, которые я могу найти в сети.

Я сделал свое исследование и выяснил, что в int (11) 11 - максимальная ширина отображения для целых чисел, и это значение по умолчанию, если только Целое не является UNSIGNED (в этом случае оно 10).

Когда я вижу что-то вроде этого:

id INT(11) not null AUTO_INCREMENT

У меня нет вопросов. Но почему я вижу разные вещи в разных учебниках? Например, в некоторых из них говорится:

id INT(10) not null AUTO_INCREMENT

И даже

id INT(4) not null AUTO_INCREMENT

Каковы авторы этих попыток достичь? Ни один из них, похоже, не пытается объяснить, что означает 10 или 4.

Хорошо, они, очевидно, уменьшают ширину экрана, но почему? Что случилось с шириной по умолчанию 11? Почему они хотят изменить его? Или есть другие причины, о которых я не знаю?

Спасибо.

4b9b3361

Ответ 1

x в INT(x) не имеет ничего общего с требованиями к пространству или любыми другими проблемами производительности, это действительно просто ширина экрана. Обычно настройка ширины экрана на разумное значение в основном полезна с опцией UNSIGNED ZEROFILL.

//INT(4) UNSIGNED ZEROFILL
0001
0002 
...
0099
...
0999
...
9999
...
10000

//INT(2) UNSIGNED ZEROFILL
01
02 
...
09
...
99
...
100

Без опции UNSIGNED ZEROFILL значение будет заполнено пробелами с пробелами до соответствующей ширины отображения.

//INT(4)
   1
   2 
...
  99
...
 999
...
9999
...
10000

//INT(2)
 1
 2 
...
 9
...
99
...
100

Ответ 2

Число - это просто репрезентативный параметр, называемый "ширина экрана". Он может использоваться некоторыми приложениями для заполнения поля при отображении числовых типов данных.

Размер int не является ни битами, ни байтами. Это просто ширина экрана, которая используется, когда поле имеет нулевой ZEROFILL.

Этот блог объясняет значение int (size) в MySQL.

Ответ 3

Из документы:

"Эта дополнительная ширина экрана может использоваться приложениями для отображения целочисленных значений, имеющих ширину, меньшую ширины, указанной для столбца, с помощью левого заполнения их пробелами. (То есть эта ширина присутствует в метаданных, возвращаемых с результатом если он используется или нет, зависит от приложения.)" То есть, int(4) вежливо спрашивает, что 123 будет отображаться как "123". Не знаю, сколько вещей действительно уделяет внимание или почему они беспокоились в учебнике.

"Ширина экрана не ограничивает диапазон значений, которые могут быть сохранены в столбце. Также он не позволяет корректно отображать значения, превышающие ширину отображения столбца." Поэтому, если вы запустите 123456 в int(4), он все равно будет 123456.

Ничего общего с дисковым пространством или производительностью, просто намек на то, что приложение извлекает данные, которые он хотел бы отображать, по крайней мере, на N цифр.

Связанная опция ZEROFILL может использоваться вместе, чтобы фактически выгрузить возвращаемые данные. Таким образом, 123 в int(4) ZEROFILL возвращается как 0123.

Ответ 4

Да, он определяет ширину отображения, и это вступает в игру только тогда, когда указан ZEROFILL. Таким образом, в это время он может заполнить поле с требуемым количеством нулей.

Ответ 6

Я согласен с тем, что руководство MySQL немного расплывчато по длине/ширине отображения целых чисел. Вы можете подумать, что это ограничивает значение, которое вы можете сохранить в столбце, до количества цифр, но допустимый диапазон colomn не изменяется, если вы установите его на 1 или 11.

В действительности это определяет ширину отображения значения столбца. Единственный случай, когда это полезно, - если вы используете ZEROFILL для заполнения ваших значений нулями.

В принципе, нет никакой реальной разницы между INT (1) и INT (11) в терминах того, что вы можете сохранить в столбце, единственный случай, когда это становится актуальным, - это когда вы хотите ЗАПРЕЩАЕТЕ ваши значения.

Дополнительная информация:
http://alexander.kirk.at/2007/08/24/what-does-size-in-intsize-of-mysql-mean/
http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

Ответ 7

Копирование из этой статьи статьи в блоге:

MySQL имеет малоизвестную функцию для числовых типов, известных как zerofill. Эта функция влияет на размер дисплея числовых типов. В отличие от типов строк число внутри круглых скобок не является размером хранилища в символах для типа. Для числовых типов само имя типа определяет размер хранилища.

Integer тип имеет размер заполнения для нулевого нуля.