FLOAT
および DOUBLE
型は概数値データ値を表します。 MySQL は、単精度値には 4 バイトを、倍精度値には 8 バイトを使用します。
FLOAT
の場合、SQL 標準では、カッコで囲まれたキーワード FLOAT
の後のビット単位の精度 (指数の範囲ではない) をオプションで指定できます。つまり、FLOAT(
です。 MySQL では、このオプションの精度指定もサポートされていますが、p
)FLOAT(
の精度値は記憶域サイズの決定にのみ使用されます。 0 から 23 の精度は、4 バイト単精度の p
)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
になります。
MySQL 8.0.17 では、非標準の FLOAT(
および M
,D
)DOUBLE(
構文は非推奨であり、将来のバージョンの MySQL ではサポートされなくなる予定です。
M
,D
)
浮動小数点値は概数値であり、真数値としては格納されないので、比較で値を真数値として扱おうとすると、問題が発生することがあります。 これらはまた、プラットフォームまたは実装の依存関係にも従います。 詳細は、セクションB.3.4.8「浮動小数点値に関する問題」を参照してください。
移植性を最大にするために、概数値データ値のストレージを必要とするコードでは、精度または桁数が指定されていない FLOAT
または DOUBLE PRECISION
を使用する必要があります。