Databases Reference
In-Depth Information
Real Numbers
Real numbers are numbers that have a fractional part. However, they aren't just for
fractional numbers; you can also use DECIMAL to store integers that are so large they
don't fit in BIGINT . MySQL supports both exact and inexact types.
The FLOAT and DOUBLE types support approximate calculations with standard floating-
point math. If you need to know exactly how floating-point results are calculated, you
will need to research your platform's floating-point implementation.
The DECIMAL type is for storing exact fractional numbers. In MySQL 5.0 and newer, the
DECIMAL type supports exact math. MySQL 4.1 and earlier used floating-point math to
perform computations on DECIMAL values, which could give strange results because of
loss of precision. In these versions of MySQL, DECIMAL was only a “storage type.”
The server itself performs DECIMAL math in MySQL 5.0 and newer, because CPUs don't
support the computations directly. Floating-point math is significantly faster, because
the CPU performs the computations natively.
Both floating-point and DECIMAL types let you specify a precision. For a DECIMAL column,
you can specify the maximum allowed digits before and after the decimal point. This
influences the column's space consumption. MySQL 5.0 and newer pack the digits into
a binary string (nine digits per four bytes). For example, DECIMAL(18, 9) will store nine
digits from each side of the decimal point, using nine bytes in total: four for the digits
before the decimal point, one for the decimal point itself, and four for the digits after
the decimal point.
A DECIMAL number in MySQL 5.0 and newer can have up to 65 digits. Earlier MySQL
versions had a limit of 254 digits and stored the values as unpacked strings (one byte
per digit). However, these versions of MySQL couldn't actually use such large numbers
in computations, because DECIMAL was just a storage format; DECIMAL numbers were
converted to DOUBLE s for computational purposes,
You can specify a floating-point column's desired precision in a couple of ways, which
can cause MySQL to silently choose a different data type or to round values when you
store them. These precision specifiers are nonstandard, so we suggest that you specify
the type you want but not the precision.
Floating-point types typically use less space than DECIMAL to store the same range of
values. A FLOAT column uses four bytes of storage. DOUBLE consumes eight bytes and has
greater precision and a larger range of values than FLOAT . As with integers, you're
choosing only the storage type; MySQL uses DOUBLE for its internal calculations on
floating-point types.
Because of the additional space requirements and computational cost, you should use
DECIMAL only when you need exact results for fractional numbers—for example, when
storing financial data. But in some high-volume cases it actually makes sense to use a
BIGINT instead, and store the data as some multiple of the smallest fraction of currency
 
Search WWH ::




Custom Search