Как работает тип данных INT в PHP / MySQL [duplicate]

Это означает, что вы пытаетесь манипулировать тем, что имеет ссылку, но еще не инициализировано. Первое, что нужно сделать, это проверить каждый созданный экземпляр. Используйте контрольные точки, часы, проверяйте свои значения varibale. Следить за трассировкой стека и искать точные строки и столбцы, которые создают проблему

369
задан Gaurav 12 April 2011 в 11:58
поделиться

10 ответов

INT всегда будет 4 байта независимо от того, какая длина указана.

  • TINYINT = 1 байт (8 бит)
  • SMALLINT = 2 байта (16 бит)
  • MEDIUMINT = 3 байта (24 бит)
  • INT = 4 байта (32 бит)
  • BIGINT = 8 байт (64 бит).

Длина просто указывает, сколько символов отображать при выборе данных с помощью клиента командной строки mysql.

... и максимальное значение будет 2147483647 (Подпись) или 4294967295 (Без знака )

522
ответ дан Drew 26 August 2018 в 11:45
поделиться

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

-9
ответ дан Dudee 26 August 2018 в 11:45
поделиться

Каков размер столбца int (11) в mysql в байтах?

(11) - этот атрибут типа данных int не имеет ничего общего с размером столбца. Это просто ширина отображения целочисленного типа данных. Из 11.1.4.5. Атрибуты числового типа :

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

29
ответ дан ks1322 26 August 2018 в 11:45
поделиться

Хотя этот ответ вряд ли будет замечен, я думаю, что следующее разъяснение стоит сделать:

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

ДИАПАЗОН ДЕТАЛИ Ширина отображения, по-видимому, предназначена для предоставления некоторых метаданных о том, сколько нулей должно отображаться в нулевом заполненном номере. Он фактически не ограничивает длину числа, возвращаемого из запроса, если это число превышает указанную ширину отображения. Чтобы узнать, какая длина / ширина фактически разрешена для целочисленного типа данных в MySQL, см. Список & amp; link: ( типы: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT ); Поэтому, сказав вышеизложенное, вы можете ожидать, что ширина экрана не повлияет на результаты стандартного запроса, если только столбцы не указаны как столбцы ZEROFILL или в случае, когда данные втягиваются в приложение & amp; это приложение собирает ширину отображения для использования для какого-либо другого типа заполнения.

Первичная ссылка: https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean

10
ответ дан MER 26 August 2018 в 11:45
поделиться

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.

98
ответ дан priyabagus 26 August 2018 в 11:45
поделиться

Как говорили другие, минимальные / максимальные значения, которые может хранить столбец, и сколько памяти он занимает в байтах, определяется только типом, а не длиной.

Многие из этих ответов говорят о том, что часть (11) влияет только на ширину отображения, которая не совсем верна, но в основном.

Определение int(2) без Указанный zerofill будет:

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

Единственное, что будет делать (2), - это также указать нулевое значение :

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

Лучший способ увидеть все нюансы:

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 и может отличаться или не изменяться для других реализаций.

30
ответ дан Programster 26 August 2018 в 11:45
поделиться

Хорошее объяснение этого можно найти здесь здесь . Суммировать: число в скобке в int (N) часто путается максимальным размером, разрешенным для столбца, как это имеет место в случае varchar (N). Но это не относится к типам данных Integer - число N в скобках не является максимальным размером для столбца, а просто параметром, указывающим MySQL, какую ширину отображает столбец, когда данные таблицы просматриваются через MySQL console (когда вы используете атрибут ZEROFILL). Число в скобках подскажет MySQL, сколько нулей для ввода входящих целых чисел. Например: если вы используете ZEROFILL в столбце, который установлен в INT (5), а число 78 вставлено, MySQL будет заполнять это значение нулями до тех пор, пока число не удовлетворит число в скобках. т. е. 78 станет 00078 и 127 станет 00127. Подводя итог: число в скобках используется для показа. В некотором смысле, число в скобках является бесполезным, если вы не используете атрибут ZEROFILL. Таким образом, размер для int останется таким же, например, -2147483648 до 2147483648 для подписанных и 0 to 4294967295 для неподписанных (~ 2,15 миллиарда и 4,2 миллиарда долларов), одна из причин, по которым разработчики не знают историю, стоящую за номером N в скобках, поскольку это вряд ли влияет на базу данных, если она содержит более 2 миллиардов строк), а в байтах - 4 байта.

Для получения дополнительной информации о размере / диапазоне типов Integer см. Руководство по MySQL

13
ответ дан Robin Green 26 August 2018 в 11:45
поделиться

В 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

5
ответ дан Sachin Agrawal 26 August 2018 в 11:45
поделиться

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

-5
ответ дан Samuel 26 August 2018 в 11:45
поделиться

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

97
ответ дан Santosh Linkha 26 August 2018 в 11:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: