このセクションで、以下の主題を中心にして、MySQL 5.1内におけるDECIMALデータタイプ(並びにその同義語)の持つ特徴を論説します:
最大桁数
ストレージフォーマット
ストレージ要件
標準外のMySQLには、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桁まで持つことができました。しかし、計算は浮動小数点を使って実行されたで、結果は正確でなく、近似でした。)
MySQL5.1では、DECIMAL コラムのための値は、4バイトの中に9個の10進数をパックする2進法のフォーマットを使って記憶されます。各値の整数部と端数部に対する記憶要件は別々に決定されます。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)Md桁桁の精度を持っています。
DECIMALデータタイプの古い処理に依存しているアプリケーションのポーテングに関する詳細情報については、MySQL 5.0 Reference Manualをご参照ください。
