|
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.