The `DECIMAL`

and `NUMERIC`

types store exact numeric data
values. These types are used when it is important to preserve exact precision, for example with monetary data.
In MySQL, `NUMERIC`

is implemented as `DECIMAL`

, so the
following remarks about `DECIMAL`

apply equally to `NUMERIC`

.

MySQL 5.7 stores `DECIMAL`

values in binary format. See Section
12.19, "Precision Math".

In a `DECIMAL`

column declaration, the precision and scale can be (and usually is)
specified; for example:

salary DECIMAL(5,2)

In this example, `5`

is the precision and `2`

is the
scale. The precision represents the number of significant digits that are stored for values, and the scale
represents the number of digits that can be stored following the decimal point.

Standard SQL requires that `DECIMAL(5,2)`

be able to store any value with five digits
and two decimals, so values that can be stored in the `salary`

column range from
`-999.99`

to `999.99`

.

In standard SQL, the syntax `DECIMAL(`

is
equivalent to * M*)

`DECIMAL(``M`

,0)

. Similarly,
the syntax `DECIMAL`

is equivalent to `DECIMAL(``M`

,0)

, where the implementation is permitted to decide the
value of `M`

`DECIMAL`

syntax. The default value of `M`

If the scale is 0, `DECIMAL`

values contain no decimal point or fractional part.

The maximum number of digits for `DECIMAL`

is 65, but the actual range for a given
`DECIMAL`

column can be constrained by the precision or scale for a given column.
When such a column is assigned a value with more digits following the decimal point than are permitted by the
specified scale, the value is converted to that scale. (The precise behavior is operating system-specific, but
generally the effect is truncation to the permissible number of digits.)

Spec-Zone.ru - all specs in one place