FirebirdSQL logo

NUMERIC

Формат объявления данных
  NUMERIC
| NUMERIC(precision)
| NUMERIC(precision, scale)
Table 1. Параметры типа NUMERIC
Параметр ^^ Описание

precision

Точность. Может быть в диапазоне от 1 до 38.По умолчанию 9.

scale

Масштаб. Может быть в диапазоне от 0 до precision.По умолчанию 0.

В зависимости от точности precision и масштаба scale СУБД хранит данные по-разному.

Приведём примеры того, как СУБД хранит данные в зависимости от формы их объявления:

NUMERIC(4)    stored as   SMALLINT (exact data)
NUMERIC(4,2)              SMALLINT (data * 102)
NUMERIC(10,4) (Dialect 1) DOUBLE PRECISION
              (Dialect 3) BIGINT (data * 104)
NUMERIC(38, 6)            INT128 (data * 106)
Caution

Всегда надо помнить, что формат хранения данных зависит от точности.Например, вы задали тип столбца NUMERIC(2, 2), предполагая, что диапазон значений в нем будет -0.99…​0.99.Однако в действительности диапазон значений в столбце будет -327.68..327.67, что объясняется хранением типа данных NUMERIC(2, 2) в формате SMALLINT.Фактически типы данных NUMERIC(4, 2), NUMERIC(3, 2) и NUMERIC(2, 2) являются одинаковыми.

Таким образом, для реального хранения данных в столбце с типом данных NUMERIC(2, 2) в диапазоне -0.99…​0.99 для него надо создавать ограничение.

DECIMAL

Формат объявления данных
  DECIMAL
| DECIMAL(precision)
| DECIMAL(precision, scale)
Table 1. Параметры типа DECIMAL
Параметр ^^ Описание

precision

Точность. Может быть в диапазоне от 1 до 38.По умолчанию 9.

scale

Масштаб. Может быть в диапазоне от 0 до precision.По умолчанию 0.

Формат хранения данных в базе во многом аналогичен NUMERIC, хотя существуют некоторые особенности, которые проще всего пояснить на примере.

Приведём примеры того, как СУБД хранит данные в зависимости от формы их объявления:

DECIMAL(4)    stored as   INTEGER (exact data)
DECIMAL(4,2)              INTEGER (data * 102)
DECIMAL(10,4) (Dialect 1) DOUBLE PRECISION
              (Dialect 3) BIGINT (data * 104)
DECIMAL(38, 6)            INT128 (data * 106)