Числовой тип данных

Числовые данные разделяются на точные и приближенные, на целые и вещественные. В отдельную категорию можно отнести битовые значения.

Точные целые числа

ТипОбъем памятиДиапазон
TINYINT1 байтот -128 до 127 (от -27 до 27-1)
от 0 до 255 (от 0 до 28-1)
SMALLINT2 байтаот -32768 до 32767 (от -215 до 215-1)
от 0 до 65535 (от 0 до 216-1)
MEDIUMINT3 байтаот -223 до 223-1
от 0 до 224-1
INT
INTEGER
(синонимы)
4 байтаот -231 до 231-1
от 0 до 232-1
BIGINT8 байтот -263 до 263-1
от 0 до 264-1

Целые числа могут быть объявлены с ключевым словом UNSIGNED. В этом случае элементам данного столбца нельзя будет присвоить отрицательные значения, а допустимый диапазон, которые принимает тип удваивается. Так, тип TINYINT может принимать значения от -128 до 127, а TINYINT UNSIGNED — от 0 до 255.

Точные вещественные числа

ТипДиапазон
DEC[(M,D)]
DECIMAL[(M,D)]
(синонимы)
Зависит от параметров M и D

Тип DECIMAL хранит точное вещественное значение данных. Он используется, когда точность является критически важной. Например, при хранении финансовых данных.

Пример использования:

MySQL 8.1
CREATE TABLE Users (
    ...
    salary DECIMAL(5,2)
);

В данном примере объявляется, что в колонке salary будут храниться числа, имеющие максимум 5 цифр, причём 2 из которых отведены под десятичную часть. То есть, в данной колонке будут храниться значения в промежутке от -999.99 до 999.99.

Синтаксис DECIMAL эквивалентен DECIMAL(M) и DECIMAL(M,0). По умолчанию, параметр M равен 10.

Целая часть и часть после точки хранятся как 2 отдельных целых числа. На основании этого факта можно легко рассчитать затрачиваемый объем памяти. Так у DECIMAL(5,2) целая часть содержит 3 цифры и занимает 2 байта, часть после точки 2 цифры - достаточно 1 байта. Итого, на хранение будет потрачено 3 байта.

Битовые числа

ТипОбъем памятиДиапазон
BIT[(M)]M битОт 1 до 64 битов, в зависимости от значения M
BOOL
BOOLEAN
(синонимы)
1 битЛибо 0, либо 1

Тип данных BIT(M) хранит последовательность битов заданной длины. По умолчанию, длина составляет 8 бит. Если назначаемое значение в колонке с данным типом использует меньше M бит, то происходит дополнение нулями слева. Например, при попытке записать значение b'101' в BIT(6) храниться в итоге будет b'000101'.

Приближенные числа

ТипОбъем памятиДиапазон
FLOAT[(M, D)]4 байтаМинимальное значение ±1.17·10-39
Максимальное значение ±3.4·1038
REAL[(M, D)]
DOUBLE[(M, D)]
(синонимы)
8 байтовМинимальное значение ±2.22·10-308
Максимальное значение ±1.79·10308

Числовые типы данных с плавающей точкой также могут иметь параметр UNSIGNED. Как и в целочисленных типах, этот атрибут предотвращает хранение в отмеченном столбце отрицательных величин, но, в отличие от целочисленных типов, максимальный интервал для величин столбца остаётся прежним.

Целые числа

ТипОбъем памятиДиапазон
SMALLINT2 байтаот -32768 до 32767
INT
INTEGER
(синонимы)
4 байтаот -2147483648 до 2147483647
BIGINT8 байтот -9223372036854775808 до 9223372036854775807

Автоинкрементные типы

ТипОбъем памятиДиапазон
SMALLSERIAL2 байтаот 1 до 32767
SERIAL4 байтаот 1 до 2147483647
BIGSERIAL8 байтот 1 до 9223372036854775807

Типы SERIAL являются псевдотипами для создания автоинкрементных столбцов. SERIAL эквивалентен INTEGER с автоматически создаваемой последовательностью.

Точные вещественные числа

ТипТочностьДиапазон
DECIMAL[(precision, scale)]
NUMERIC[(precision, scale)]
(синонимы)
ПользовательскаяДо 131072 цифр до десятичной точки и до 16383 цифр после

Тип NUMERIC хранит точное вещественное значение данных. Он используется, когда точность является критически важной. Например, при хранении финансовых данных.

Пример использования:

MySQL 8.1
CREATE TABLE Users (
    ...
    salary NUMERIC(10,2)
);

В данном примере объявляется, что в колонке salary будут храниться числа, имеющие максимум 10 цифр, причём 2 из которых отведены под десятичную часть. То есть, в данной колонке будут храниться значения в промежутке от -99999999.99 до 99999999.99.

Приближенные числа

ТипОбъем памятиТочностьДиапазон
REAL4 байта6 знаковот 1E-37 до 1E+37
DOUBLE PRECISION8 байтов15 знаковот 1E-307 до 1E+308

Типы с плавающей точкой используются для приближенных вычислений. PostgreSQL также поддерживает специальные значения: Infinity, -Infinity и NaN (не число).