Как использовать MySQL DECIMAL?

Я не могу понять MySQL DECIMAL. Мне нужна строка, чтобы содержать число от 00.0001 до 99.9999. Как бы я структурировал его так, чтобы работать?

Ответ 1

Двойные столбцы не совпадают с столбцами DECIMAL, а вы попадете в проблему, если для финансовых данных используются столбцы DOUBLE.

DOUBLE на самом деле представляет собой двойную (64-битную, а не 32-разрядную) версию FLOAT. Числа с плавающей запятой являются приблизительными представлениями действительных чисел, и они не являются точными. Фактически, простые числа, такие как 0.01, не имеют точного представления в типах FLOAT или DOUBLE.

Столбцы DECIMAL являются точными представлениями, но они занимают намного больше места для гораздо меньшего диапазона возможных чисел. Чтобы создать столбец, способный удерживать значения от 0,0001 до 99,9999, как вы просили, вам понадобится следующая инструкция

CREATE TABLE your_table
(
    your_column DECIMAL(6,4) NOT NULL
);

Определение столбца следует за форматом DECIMAL (M, D), где M - максимальное количество цифр (точность), а D - количество цифр справа от десятичной точки (шкала).

Это означает, что предыдущая команда создает столбец, который принимает значения от -99.9999 до 99.9999. Вы также можете создать колонку UNSIGNED DECIMAL, начиная от 0,0000 до 99,9999.

Для получения дополнительной информации о MySQL DECIMAL официальные документы всегда являются отличным ресурсом.

Имейте в виду, что вся эта информация верна для версий MySQL 5.0.3 и выше. Если вы используете предыдущие версии, вам действительно нужно обновить.

Ответ 2

Хотя ответы выше кажутся правильными, просто простое объяснение, чтобы дать вам представление о том, как это работает.

Предположим, что ваш столбец установлен в значение DECIMAL(13,4). Это означает, что столбец будет иметь общий размер 13 цифр, где 4 из них будут использоваться для прецизионного представления.

Итак, в целом, для этого столбца вы должны иметь максимальное значение: 999999999,9999

Ответ 3

В комментариях есть правильные решения, но суммировать их в один ответ:

Вы должны использовать DECIMAL (6,4).

Тогда вы можете иметь 6 общее количество цифр, 2 до и 4 после десятичной точки (шкала). По крайней мере, согласно this.

Ответ 4

MySQL 5.x спецификация для десятичного типа данных: DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]. Ответ выше неверен, говоря, что беззнаковые десятичные знаки невозможны.

Чтобы определить поле, допускающее только десятичные знаки без знака, с общей длиной 6 цифр, 4 из которых являются десятичными, вы должны использовать: DECIMAL (6,4) UNSIGNED.

Вы также можете создавать неподписанные (т.е. не отрицательные) типы данных FLOAT и DOUBLE.