The FLOAT
and DOUBLE
types
represent approximate numeric data values. MySQL uses four bytes
for single-precision values and eight bytes for double-precision
values.
For FLOAT
, the SQL standard permits an
optional specification of the precision (but not the range of
the exponent) in bits following the keyword
FLOAT
in parentheses, that is,
FLOAT(
.
MySQL also supports this optional precision specification, but
the precision value in
p
)FLOAT(
is used only to determine storage size. A precision from 0 to 23
results in a 4-byte single-precision p
)FLOAT
column. A precision from 24 to 53 results in an 8-byte
double-precision DOUBLE
column.
MySQL permits a nonstandard syntax:
FLOAT(
or
M
,D
)REAL(
or M
,D
)DOUBLE
PRECISION(
.
Here,
M
,D
)(
means than values can be stored with up to
M
,D
)M
digits in total, of which
D
digits may be after the decimal
point. For example, a column defined as
FLOAT(7,4)
is displayed as
-999.9999
. MySQL performs rounding when
storing values, so if you insert 999.00009
into a FLOAT(7,4)
column, the approximate
result is 999.0001
.
As of MySQL 8.0.17, the nonstandard
FLOAT(
and
M
,D
)DOUBLE(
syntax is deprecated and you should expect support for it to be
removed in a future version of MySQL.
M
,D
)
Because floating-point values are approximate and not stored as exact values, attempts to treat them as exact in comparisons may lead to problems. They are also subject to platform or implementation dependencies. For more information, see Section B.3.4.8, “Problems with Floating-Point Values”.
For maximum portability, code requiring storage of approximate
numeric data values should use FLOAT
or
DOUBLE PRECISION
with no specification of
precision or number of digits.