無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 22 精密計算 :: 22.2 DECIMAL データ タイプの変更
« 22.1 数値のタイプ

22.3 式の取り扱い »
Section Navigation      [Toggle]
  • 22 精密計算
  • 22.1 数値のタイプ
  • 22.2 DECIMAL データ タイプの変更
  • 22.3 式の取り扱い
  • 22.4 丸め挙動
  • 22.5 精密計算の例

22.2. DECIMAL データ タイプの変更

このセクションは、以下の主題を中心にして、MySQL 5.1 内における DECIMAL データ タイプ(並びにその同義語)の持つ特徴について説明しています。

  • 最大桁数

  • ストレージ フォーマット

  • ストレージ要件

  • DECIMAL カラムの上部に対する非スタンダード MySQL 拡張子

MySQL の古いバージョン用に書かれたアプリケーションに適合しない可能性のある問題については、このセクション全体で指摘されます。

DECIMAL カラムに対する宣言構文は DECIMAL(M,D) です。MySQL 5.1 における引数値の範囲は次の通りです:

  • 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 をご参照ください。

Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.