DECIMAL
Data Type Changes
1003
range of such literals differs from before. (Prior to MySQL 5.0.3, decimal values could have up to
254 digits. However, calculations were done using floating-point and thus were approximate, not
exact.) This change in the range of literal values is another possible source of incompatibility for older
applications.
Values for
DECIMAL
columns no longer are represented as strings that require 1 byte per digit or sign
character. Instead, a binary format is used that packs nine decimal digits into 4 bytes. This change
to
DECIMAL
storage format changes the storage requirements as well. The storage requirements for
the integer and fractional parts of each value are determined separately. Each multiple of nine digits
requires 4 bytes, and any remaining digits require some fraction of 4 bytes. The storage required for
remaining digits is given by the following table.
Leftover Digits
Number of Bytes
0
0
1–2
1
3–4
2
5–6
3
7–9
4
For example, a
DECIMAL(18,9)
column has nine digits on either side of the decimal point, so the
integer part and the fractional part each require 4 bytes. A
DECIMAL(20,6)
column has fourteen
integer digits and six fractional digits. The integer digits require four bytes for nine of the digits and 3
bytes for the remaining five digits. The six fractional digits require 3 bytes.
As a result of the change from string to numeric format for
DECIMAL
storage,
DECIMAL
columns
no longer store a leading
+
or
-
character or leading
0
digits. Before MySQL 5.0.3, if you inserted
+0003.1
into a
DECIMAL(5,1)
column, it was stored as
+0003.1
. As of MySQL 5.0.3, it is stored as
3.1
. For negative numbers, a literal
-
character is no longer stored. Applications that rely on the older
behavior must be modified to account for this change.
The change of storage format also means that
DECIMAL
columns no longer support the nonstandard
extension that permitted values larger than the range implied by the column definition. Formerly, 1
byte was allocated for storing the sign character. For positive values that needed no sign byte, MySQL
permitted an extra digit to be stored instead. For example, a
DECIMAL(3,0)
column must support a
range of at least
–999
to
999
, but MySQL would permit storing values from
1000
to
9999
as well, by
using the sign byte to store an extra digit. This extension to the upper range of
DECIMAL
columns is
no longer supported. As of MySQL 5.0.3, a
DECIMAL(M,D)
column permits at most
M
-
D
digits to the
left of the decimal point. This can result in an incompatibility if an application has a reliance on MySQL
permitting “too-large” values.
The SQL standard requires that the precision of
NUMERIC(M,D)
be exactly
M
digits. For
DECIMAL(M,D)
, the standard requires a precision of at least
M
digits but permits more. In MySQL,
DECIMAL(M,D)
and
NUMERIC(M,D)
are the same, and both have a precision of exactly
M
digits.
Summary of incompatibilities:
The following list summarizes the incompatibilities that result from changes to
DECIMAL
column and
value handling. You can use it as guide when porting older applications for use with MySQL 5.0.3 and
up.
• For
DECIMAL(M,D)
, the maximum
M
is 65, not 254.
• Calculations involving exact-value decimal numbers are accurate to 65 digits. This is fewer than
the maximum number of digits permitted before MySQL 5.0.3 (254 digits), but the exact-value
precision is greater. Calculations formerly were done with double-precision floating-point, which has
a precision of 52 bits (about 15 decimal digits).
• The nonstandard MySQL extension to the upper range of
DECIMAL
columns is no longer supported.
Summary of Contents for 5.0
Page 1: ...MySQL 5 0 Reference Manual ...
Page 18: ...xviii ...
Page 60: ...40 ...
Page 396: ...376 ...
Page 578: ...558 ...
Page 636: ...616 ...
Page 844: ...824 ...
Page 1234: ...1214 ...
Page 1427: ...MySQL Proxy Scripting 1407 ...
Page 1734: ...1714 ...
Page 1752: ...1732 ...
Page 1783: ...Configuring Connector ODBC 1763 ...
Page 1793: ...Connector ODBC Examples 1773 ...
Page 1839: ...Connector Net Installation 1819 2 You must choose the type of installation to perform ...
Page 2850: ...2830 ...
Page 2854: ...2834 ...
Page 2928: ...2908 ...
Page 3000: ...2980 ...
Page 3122: ...3102 ...
Page 3126: ...3106 ...
Page 3174: ...3154 ...
Page 3232: ...3212 ...