Это означает, что вы пытаетесь манипулировать тем, что имеет ссылку, но еще не инициализировано. Первое, что нужно сделать, это проверить каждый созданный экземпляр. Используйте контрольные точки, часы, проверяйте свои значения varibale. Следить за трассировкой стека и искать точные строки и столбцы, которые создают проблему
INT всегда будет 4 байта независимо от того, какая длина указана.
Длина просто указывает, сколько символов отображать при выборе данных с помощью клиента командной строки mysql.
... и максимальное значение будет 2147483647 (Подпись) или 4294967295 (Без знака )
4294967295 - это ответ, поскольку int (11) показывает максимум 11 цифр IMO
Каков размер столбца int (11) в mysql в байтах?
blockquote>
(11)
- этот атрибут типа данныхint
не имеет ничего общего с размером столбца. Это просто ширина отображения целочисленного типа данных. Из 11.1.4.5. Атрибуты числового типа :MySQL поддерживает расширение для необязательного указания ширины отображения целочисленных типов данных в круглых скобках, следующих за базовым ключевым словом для этого типа. Например, INT (4) указывает INT с шириной отображения четырех цифр.
blockquote>
Хотя этот ответ вряд ли будет замечен, я думаю, что следующее разъяснение стоит сделать:
ДИАПАЗОН ДЕТАЛИ Ширина отображения, по-видимому, предназначена для предоставления некоторых метаданных о том, сколько нулей должно отображаться в нулевом заполненном номере. Он фактически не ограничивает длину числа, возвращаемого из запроса, если это число превышает указанную ширину отображения. Чтобы узнать, какая длина / ширина фактически разрешена для целочисленного типа данных в MySQL, см. Список & amp; link: ( типы: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT ); Поэтому, сказав вышеизложенное, вы можете ожидать, что ширина экрана не повлияет на результаты стандартного запроса, если только столбцы не указаны как столбцы ZEROFILL или в случае, когда данные втягиваются в приложение & amp; это приложение собирает ширину отображения для использования для какого-либо другого типа заполнения.
Первичная ссылка: https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean
INT ( somenumber ) будет иметь значение только в терминах отображения, то есть отображать в цифрах в цифрах [ somenumber »и не ограничиваться только 11. Вы соединяете его с помощью ZEROFILL
, который добавит нули до тех пор, пока он не будет соответствовать вашей длине
. Обратите внимание, что значение, хранящееся в базе данных, не изменяется, любые вычисления будут по-прежнему вести себя так, как есть.
Замечания:
ZEROFILL
будет содержать нули. INT (5) ZEROFILL с сохраненным значением 32 покажет 00032 INT (5) с сохраненным значением 32 покажет 32 INT с сохраненным значением 32 покажет 32 . Аналогичный применяется также к BIGINT, MEDIUMINT, SMALLINT и TINYINT.
Как говорили другие, минимальные / максимальные значения, которые может хранить столбец, и сколько памяти он занимает в байтах, определяется только типом, а не длиной.
Многие из этих ответов говорят о том, что часть (11)
влияет только на ширину отображения, которая не совсем верна, но в основном.
Определение int(2)
без Указанный zerofill будет:
100
100
при выходе (не 0
или 00
) Единственное, что будет делать (2)
, - это также указать нулевое значение :
1
01
. Лучший способ увидеть все нюансы:
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 (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
В 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) равно 4294967295
В соответствии с здесь , int(11)
будет занимать 4 байта пространства, которое представляет собой 32 бита пространства с максимальным значением 2^(31) = 2147483648
и -2147483648
min. Один бит для знака.