Spec-Zone .ru
спецификации, руководства, описания, API

12.19.2. DECIMAL Изменения Типа данных

Этот раздел обсуждает характеристики DECIMAL тип данных (и его синонимы) в MySQL 5.6, с определенным отношением к следующим темам:

Возможные несовместимости с приложениями, которые пишутся для более старых версий MySQL (до 5.0.3) отмечаются всюду по этому разделу.

Синтаксис объявления для a DECIMAL столбец DECIMAL(M,D). Диапазоны значений для параметров в MySQL 5.6 следующие:

Максимальное значение 65 для M средства это вычисления на DECIMAL значения точны до 65 цифр. Этот предел 65 цифр точности также применяется к точному значению числовые литералы, таким образом, максимальный диапазон таких литералов отличается до. (В более старых версиях MySQL у десятичных значений могло быть до 254 цифр. Однако, вычисления были сделаны, используя с плавающей точкой и таким образом были приблизительны, не точны.)

Значения для DECIMAL столбцы в MySQL 5.6 сохранены, используя двоичный формат, который упаковывает девять десятичных цифр в 4 байта. Требования хранения для целых и дробных частей каждого значения определяются отдельно. Каждое кратное число девяти цифр требует 4 байтов, и любые остающиеся перенесенные цифры требуют некоторой части 4 байтов. Хранение, требуемое для того, чтобы остаться цифрами, дается следующей таблицей.

Оставшиеся Цифры Число Байтов
0 0
1–2 1
3–4 2
5–6 3
7–9 4

Например, a DECIMAL(18,9) у столбца есть девять цифр по обе стороны от десятичной точки, таким образом, целая часть и дробная часть каждый требует 4 байтов. A DECIMAL(20,6) у столбца есть четырнадцать целочисленных цифр и шесть дробных цифр. Целочисленные цифры требуют четырех байтов для девяти из цифр и 3 байтов для оставления пятью цифрами. Шесть дробных цифр требуют 3 байтов.

В отличие от некоторых более старых версий MySQL, DECIMAL столбцы в MySQL 5.6 не хранят продвижение + символ или - символ или продвижение 0 цифры. Если Вы вставляете +0003.1 в a DECIMAL(5,1) столбец, это сохранено как 3.1. Для отрицательных чисел, литерала - символ не сохранен. Приложения, которые полагаются на более старое поведение, должны быть изменены, чтобы учесть это изменение.

DECIMAL столбцы в MySQL 5.6 не разрешают значения, больше чем диапазон, подразумеваемый определением столбца. Например, a DECIMAL(3,0) столбец поддерживает диапазон -999 к 999. A DECIMAL(M,D) столбец разрешает самое большее M - D цифры налево от десятичной точки. Это не является совместимым с приложениями, полагающимися на более старые версии MySQL, который разрешал хранить дополнительную цифру вместо a + знак.

Стандарт SQL требует что точность NUMERIC(M,D) будьте точно M цифры. Для DECIMAL(M,D), стандарт требует точности, по крайней мере, M цифры, но разрешения больше. В MySQL, DECIMAL(M,D) и NUMERIC(M,D) то же самое, и у обоих есть точность точно M цифры.

Для более подробной информации о портировании приложений, которые полагаются на старую обработку DECIMAL тип данных, см. Справочник MySQL 5.0.