このセクションでは、DECIMAL
データ型 (およびそのシノニム) の特性について説明します。内容は次のとおりです:
最大桁数
ストレージフォーマット
ストレージ要件
DECIMAL
カラムの上限への非標準の MySQL 拡張。
DECIMAL
カラムの宣言構文は、DECIMAL(
です。 引数の値の範囲は次のとおりです:
M
,D
)
M
は、最大桁数 (精度) です。 その範囲は 1 から 65 までです。D
は、小数点の右側の桁数 (スケール) です。 その範囲は 0 から 30 までであり、M
より大きくすることはできません。
D
が省略された場合のデフォルトは 0 です。 M
が省略された場合のデフォルトは 10 です。
M
が 65 の最大値である場合は、DECIMAL
値に対する計算が 65 桁まで正確であることを示します。 この 65 桁の精度の制限は厳密値数値リテラルにも適用されるため、このようなリテラルの最大範囲は以前とは異なります。 (DECIMAL
リテラルのテキストの長さには制限もあります。セクション12.25.3「式の処理」 を参照してください。)
DECIMAL
カラムの値は、9 桁の小数点を 4 バイトにパックするバイナリ形式を使用して格納されます。 各値の整数部と小数部に対するストレージ要件は個別に決定されます。 9 桁の繰り返しごとに 4 バイトが必要であり、残りの桁がある場合は、4 バイトのうちの一部が必要になります。 残りの桁に必要なストレージは、次の表で指定されます。
余りの桁 | バイト数 |
---|---|
0 | 0 |
1-2 | 1 |
3-4 | 2 |
5-6 | 3 |
7-9 | 4 |
たとえば、DECIMAL(18,9)
カラムは小数点の両側に 9 桁あるため、整数部と小数部のそれぞれに 4 バイトが必要です。 DECIMAL(20,6)
カラムは整数部に 14 桁、小数部に 6 桁あります。 整数部の桁は、そのうちの 9 桁に 4 バイト、残りの 5 桁に 3 バイトが必要です。 小数部の 6 桁には 3 バイトが必要です。
DECIMAL
カラムには、先頭の +
文字、-
文字または先頭の 0
桁は格納されません。 DECIMAL(5,1)
カラムに +0003.1
を挿入すると、それは 3.1
として格納されます。 負の数の場合、リテラルの -
文字は格納されません。
DECIMAL
カラムでは、カラム定義で暗黙的に指定された範囲を超える値は許可されません。 たとえば、DECIMAL(3,0)
カラムは -999
から 999
までの範囲をサポートします。 DECIMAL(
カラムでは、M
,D
)M
まで使用できます - 小数点の左側の D
桁。
SQL 標準では、NUMERIC(
の精度は正確に M
,D
)M
桁である必要があります。 DECIMAL(
の場合、この標準では少なくとも M
,D
)M
桁の精度が必要ですが、それを超える精度が許可されます。 MySQL では、DECIMAL(
と M
,D
)NUMERIC(
は同じであり、どちらも正確に M
,D
)M
桁の精度を持っています。
DECIMAL
値の内部形式の完全な説明については、MySQL ソース配布内のファイル strings/decimal.c
を参照してください。 この形式は、decimal2bin()
関数で (例を使用して) 説明されています。