Spec-Zone .ru
спецификации, руководства, описания, API
|
Этот раздел обсуждает характеристики DECIMAL
тип данных (и его синонимы) в MySQL 5.7, с определенным отношением к
следующим темам:
Максимальное количество цифр
Формат хранения
Требования хранения
Нестандартное расширение MySQL верхнего диапазона DECIMAL
столбцы
Возможные несовместимости с приложениями, которые пишутся для более старых версий MySQL (до 5.0.3) отмечаются всюду по этому разделу.
Синтаксис объявления для a DECIMAL
столбец DECIMAL(
. Диапазоны
значений для параметров в MySQL 5.7 следующие:M
,D
)
M
максимальное количество цифр (точность).
У этого есть диапазон 1 - 65. (Более старые версии MySQL, разрешенного диапазон 1 - 254.)
D
число цифр направо от десятичной точки
(масштаб). Это имеет диапазон от 0 до 30 и должно быть не больше чем M
.
Максимальное значение 65 для M
средства это вычисления на DECIMAL
значения точны до 65 цифр. Этот предел 65 цифр точности также применяется к точному значению числовые литералы,
таким образом, максимальный диапазон таких литералов отличается до. (В более старых версиях MySQL у десятичных
значений могло быть до 254 цифр. Однако, вычисления были сделаны, используя с плавающей точкой и таким образом
были приблизительны, не точны.)
Значения для DECIMAL
столбцы в MySQL 5.7 сохранены, используя двоичный формат, который
упаковывает девять десятичных цифр в 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.7 не хранят продвижение +
символ или -
символ или продвижение 0
цифры. Если Вы
вставляете +0003.1
в a DECIMAL(5,1)
столбец, это
сохранено как 3.1
. Для отрицательных чисел, литерала -
символ не сохранен. Приложения, которые полагаются на более старое поведение, должны быть изменены, чтобы учесть
это изменение.
DECIMAL
столбцы в MySQL 5.7 не разрешают значения, больше чем диапазон, подразумеваемый определением столбца. Например,
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.