このセクションは、以下の主題を中心にして、MySQL
5.1 内における DECIMAL
データ
タイプ(並びにその同義語)の持つ特徴について説明しています。
最大桁数
ストレージ フォーマット
ストレージ要件
DECIMAL
カラムの上部に対する非スタンダード MySQL
拡張子
MySQL の古いバージョン用に書かれたアプリケーションに適合しない可能性のある問題については、このセクション全体で指摘されます。
DECIMAL
カラムに対する宣言構文は
DECIMAL(
です。MySQL 5.1
における引数値の範囲は次の通りです:
M
,D
)
M
は最大桁数(精度)です。それには1から65までの範囲が含まれています。(古いバージョンの
MySQL
では、1から254までの範囲が許容されています。)
D
は少数点(スケール)の右側にある数字の桁数です。それは0から30までの範囲であり、M
より広くてはいけません。
M
に対する最大値が65である事は、DECIMAL
値に関する計算が65桁まで正確である事を意味します。精度を65桁とするこの限界は正確値数値リテラルにも適用されるので、このようなリテラルの最大範囲は以前とは異なります。(古いバージョンの
MySQL
では、10進法の値を最高254桁まで持つ事ができました。しかし、計算は浮動小数点を使って実行されていたので、結果は正確でなく、近似値でした。)
MySQL 5.1 では、DECIMAL
カラムの為の値は、4バイトの中に9個の10進数をパックするバイナリ
フォーマットを使って格納されます。各値の整数部と端数部に対する格納要件は別々に決定されます。9桁の倍ごとに4バイト、使い残しの桁には4バイトの分数分の容量がそれぞれ必要です。例えば、DECIMAL(18,9)
カラムは少数点のいずれかの側に9桁のスペースを持っているので、整数部分と端数部分には各々4バイト必要です。DECIMAL(20,10)
カラムは小数点のいずれかの側に10桁のスペースを持っています。各々の部分には、9桁に対して4バイト、残りの桁に対して1バイトがそれぞれ必要です。
使い残しの桁に必要な格納容量を以下のテーブルに列記します:
使い残し桁数 | バイト数 |
0 | 0 |
1 | 1 |
2 | 1 |
3 | 2 |
4 | 2 |
5 | 3 |
6 | 3 |
7 | 4 |
8 | 4 |
9 | 4 |
(5.0.3より前の)古いバージョンの MySQL
とは異なり、MySQL 5.1 内の
DECIMAL
カラムは主要な
+
文字または主要な 0
桁数を格納しません。DECIMAL(5,1)
カラムの中に +0003.1
を挿入すると、それは 3.1
と格納されます。古い性能に依存するアプリケーションはこの変更を考慮するように改良を施さなければなりません。
MySQL 5.1 における DECIMAL
カラムは、カラムの定義に規定する範囲を超える大きい値を容認しません。例えば、DECIMAL(3,0)
カラムは -999
から
999
までの範囲をサポートしています。DECIMAL(
カラムは小数点の左側に最大M
,D
)M
– D
桁を容認します。これは +
サインの代わりに余分な桁を格納する事を許容している
MySQL
のもっと古いバージョンのアプリケーションには対応できません。
SQL
スタンダードは、NUMERIC(
の精度が
正確にM
,D
)M
桁である事を要求しています。DECIMAL(
に対して、スタンダードは少なくともM
、D
)M
桁の精度を要求していますが、それ以上でも容認されます。MySQL
の場合、DECIMAL(
並びに M
,D
)NUMERIC
(
は同じで、両方共正確に M
,D
)M
桁の精度を持っています。
DECIMAL
データ
タイプの古い処理に依存しているアプリケーションのポーテングに関する詳細情報については、MySQL
5.0 Reference Manual をご参照ください。