Spec-Zone.ru › MySQL 5.7

12.21.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; см. Раздел 12.21.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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/precision-math-decimal-characteristics.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API