В этой статье основное внимание уделяется типу данных BIGINT в MySQL и рассматривается, как его можно использовать для хранения целочисленных значений. Мы также узнаем его диапазон, размер хранилища и различные атрибуты, включая подписанный, беззнаковый и нулевое заполнение.
BIGINT – это ab-байтовое или 64-битное целочисленное значение, которое очень полезно для хранения огромных целочисленных значений.
BIGINT, как и любой другой целочисленный тип данных MySQL, может быть подписанным или беззнаковым. Тип данных со знаком указывает, что столбец может хранить как положительные, так и отрицательные целочисленные значения. Это тип по умолчанию для большинства целочисленных типов в MySQL. Следовательно, если явно не указано иное, любой столбец целочисленного типа может хранить как положительные, так и отрицательные целые числа.
С другой стороны, тип данных без знака указывает, что столбец может хранить только положительные целочисленные значения.
Диапазон для подписанного типа BIGINT составляет от -9223372036854775808 до 9223372036854775807.
Для беззнакового типа BIGINT значение находится в диапазоне от 0 до 18446744073709551615.
Другой атрибут типа BIGINT – это ZEROFILL. Если этот атрибут указан в столбце, столбец автоматически получает значение UNSIGNED.
Атрибут zerofill также заполняет пробелы нулями.
Давайте рассмотрим несколько примеров, чтобы проиллюстрировать, как использовать тип BIGINT.
CREATE DATABASE IF NOT EXISTS integers; USE integers;
Затем давайте создадим таблицу и заполним ее различными столбцами BIGINT, как показано в запросе ниже:
CREATE TABLE examples(x BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, y BIGINT UNSIGNED, z BIGINT ZEROFILL );
Пример 1
Давайте сначала попробуем добавить все положительные значения в таблицу:
INSERT INTO examples(x,y,z) VALUES (1,2,3);
В приведенном выше примере запроса значения допустимы, поскольку они находятся в диапазоне типов BIGINT со знаком, без знака и с нулевым заполнением.
SELECT * FROM examples; +---+------+----------------------+ | x | y | z | +---+------+----------------------+ | 1 | 2 | 00000000000000000003 | +---+------+----------------------+ 1 row in set (0.01 sec)
Пример 2
В следующем случае попробуем сложить все отрицательные значения. Пример запроса ниже:
INSERT INTO examples(x,y,z) VALUES (-1,-2,-3); ERROR 1264 (22003): Out of range value for column 'y' at row 1
В этом случае запрос не выполняется, поскольку столбец y не имеет знака. Следовательно, присвоение отрицательного значения столбцу выходит за пределы диапазона столбца.
Пример 3
Мы можем наблюдать случай, аналогичный приведенному выше, для третьего столбца. Атрибут zerofill автоматически делает столбец беззнаковым, в результате чего добавление отрицательного значения выходит за пределы допустимого диапазона. Пример такой:
INSERT INTO examples(x,y,z) VALUES (-1,2,-3); ERROR 1264 (22003): Out of range value for column 'z' at row 1
Пример 4
Давайте теперь попробуем добавить максимальные значения для каждого типа. Пример запроса:
INSERT INTO examples(x,y,z) VALUES (-9223372036854775808, 9223372036854775808, 9223372036854775808);
В приведенном выше примере, поскольку все значения находятся в диапазоне, запрос выполняется успешно.
Рассмотрим запрос ниже:
INSERT INTO examples(x,y,z) VALUES (9223372036854775807, 9223372036854775808, 9223372036854775808);
Вы заметите, что все значения находятся на максимальных значениях. Поскольку для столбца x установлено значение AUTO_INCREMENT, добавить к нему значение не удастся.
INSERT INTO examples(y,z) VALUES (9223372036854775808, 9223372036854775808); ERROR 1062 (23000): Duplicate entry '9223372036854775807' for key 'examples.PRIMARY'
Однако, если строгий режим в MySQL отключен, вы можете вставлять значения, выходящие за пределы допустимого диапазона.
SELECT * FROM examples;
В этой статье мы обсудили тип BININT в MySQL и диапазоны для его различных атрибутов.