FLOAT
および DOUBLE
型は概数値データ値を表します。MySQL は、単精度値には 4 バイトを、倍精度値には 8 バイトを使用します。
FLOAT
については、SQL 標準では、オプションで、キーワード FLOAT
に続く括弧内のビットで (指数の範囲ではなく) 精度を指定できます。MySQL はまた、このオプションの精度指定もサポートしますが、その精度値はストレージサイズを決定するためだけに使用されます。0 から 23 の精度は、4 バイト単精度の FLOAT
カラムになります。24 から 53 の精度は、8 バイト倍精度の DOUBLE
カラムになります。
MySQL は、FLOAT(
または M
,D
)REAL(
または M
,D
)DOUBLE PRECISION(
の非標準の構文を許可します。ここで、「M
,D
)(
」 は、値は合計で M
、D
)M
桁まで格納でき、そのうちの D
桁は小数点以下です。たとえば、FLOAT(7,4)
として定義されたカラムは、表示されたときには -999.9999
のようになります。MySQL は、値を格納するときに丸めを行うので、FLOAT(7,4)
カラムに 999.00009
を挿入すると、近似の結果は 999.0001
になります。
浮動小数点値は概数値であり、真数値としては格納されないので、比較で値を真数値として扱おうとすると、問題が発生することがあります。これらはまた、プラットフォームまたは実装の依存関係にも従います。詳細は、セクションB.5.5.8「浮動小数点値に関する問題」を参照してください。
移植性を最大にするために、概数値データ値のストレージを必要とするコードでは、精度または桁数が指定されていない FLOAT
または DOUBLE PRECISION
を使用する必要があります。
DOUBLE[(M,D)] [ZEROFILL] holds double-precision numeric values, pretty similar to FLOAT double-precision, except for its allowable range, which is -1.7976931348623157E+308 to -2.2250738585072014E-308, 0, and 2.2250738585072014E-308 to 1.7976931348623157E+308.
FLOAT[(M[,D])] [ZEROFILL] stores floating point numbers in the range of -3.402823466E+38 to -1.175494351E-38 and 1.175494351E-38 to 3.402823466E+38. If precision isn't specified, or <= 24, it's SINGLE precision, otherwise FLOAT is DOUBLE precision. When specified alone, precision can range from 0 to 53. If the scale is defined, too, precision may be up to 255, scale up to 253.