14.25.2 Характеристики типа данных DECIMAL
В этом разделе рассматриваются характеристики типа данных DECIMAL (и его синонимов) с учётом следующих аспектов:
Максимальное количество цифр
Формат хранения
Требования к хранению
Нестандартное расширение MySQL для верхнего диапазона
DECIMALстолбцов
Синтаксис объявления столбца DECIMAL выглядит следующим образом: DECIMAL(. Диапазоны значений аргументов следующие: M,D)
M— максимальное количество цифр (точность). Диапазон от 1 до 65.D— количество цифр справа от десятичной точки (разрядность). Диапазон от 0 до 30 и не должно быть большеM.
Если D опущено, по умолчанию используется 0. Если M опущено, по умолчанию используется 10.
Максимальное значение 65 для M означает, что вычисления со значениями DECIMAL точны до 65 цифр. Это ограничение в 65 цифр точности также применяется к числовым литералам точного значения, поэтому максимальный диапазон таких литералов отличается от предыдущего. (Также существует ограничение на длину текста литералов DECIMAL; см. Раздел 14.25.3 «Обработка выражений».)
Значения для столбцов DECIMAL хранятся в двоичном формате, в котором девять десятичных цифр упакованы в 4 байта. Требования к хранению целой и дробной части каждого значения определяются отдельно. Каждый набор из девяти цифр требует 4 байта, а оставшиеся цифры требуют некоторую часть от 4 байтов. Требуемое количество байтов для оставшихся цифр приведено в следующей таблице.
| Оставшиеся цифры | Количество байтов |
|---|---|
| 0 | 0 |
| 1–2 | 1 |
| 3–4 | 2 |
| 5–6 | 3 |
| 7–9 | 4 |
Например, в столбце DECIMAL(18,9) есть девять цифр по обе стороны от десятичной точки, поэтому целая и дробная часть каждой требуют по 4 байта. В столбце DECIMAL(20,6) есть четырнадцать целых цифр и шесть дробных. Целые цифры требуют 4 байта для девяти цифр и 3 байта для оставшихся пяти цифр. Шесть дробных цифр требуют 3 байта.
В столбцах DECIMAL не хранится символ +, символ - или ведущие 0 цифры. Если вы вставите +0003.1 в столбец DECIMAL(5,1), он будет сохранён как 3.1. Для отрицательных чисел литеральный символ - не сохраняется.
Столбцы DECIMAL не допускают значений, больших, чем диапазон, заданный определением столбца. Например, столбец DECIMAL(3,0) поддерживает диапазон от -999 до 999. Столбец DECIMAL( допускает до M,D)M - D цифр слева от десятичной точки.
Стандарт SQL требует, чтобы точность NUMERIC( составляла ровно M,D)M цифр. Для DECIMAL( стандарт требует точности не менее M,D)M цифр, но допускает и больше. В MySQL DECIMAL( и M,D)NUMERIC( совпадают, и оба имеют точность ровно M,D)M цифр.
Для получения полного объяснения внутреннего формата значений DECIMAL см. файл strings/decimal.c в дистрибутиве исходных кодов MySQL. Формат объяснён (с примером) в функции decimal2bin().
© 2025 Oracle
Licensed under the GPLv2 License.