固定小数点数型(DECIMAL, NUMERIC)

MySQL で利用可能なデータ型の中で固定小数点数型(DECIMAL, NUMERIC)の使い方について解説します。

(Last modified: )

固定小数点数型のデータ型一覧

固定小数点数型は次の1つの種類が用意されています。

DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]

M は桁数の合計 (精度) で、D は小数点以下の桁数 (スケール) です。
最大桁数 (M) は 65 。デフォルトは 10。
小数部の最大桁数 (D) は 30 。デフォルトは 0。
別名:NUMERIC

DECIMAL 型は正確なデータを格納するので、金銭データなど正確な精度を保持することが重要な場合に適しています。

例えば DECIMAL(5, 2) とした場合、小数点以下が2桁、全体で5桁の数値を格納することができるので、格納できる値は、-999.99 から 999.99 の範囲になります。

例えば DECIMAL 型のカラムを持つテーブルを作成してみます。

create table numtest(num1 decimal(5, 2));

固定小数点数型のデータ型一覧(1)

範囲内の値であれば正常に格納することができます。

insert into numtest values(37.25);

固定小数点数型のデータ型一覧(2)

範囲を超える値を格納しようとするとエラーとなります。例えば DECIMAL(5, 2) 型のカラムに 24128.4 のような範囲外の値を格納しようとすると Out of range value for column 'カラム名' というエラーになります。

insert into numtest values(24128.4);

固定小数点数型のデータ型一覧(3)

符号なし(UNSIGNED)

DECIMAL 型は正の数と負の数を扱うことができますが、データ型の後に UNSIGNED を付けると 0 と正の数しか格納できなくなります。

DECIMAL UNSIGNED

例として DECIMAL UNSIGNED 型のカラムを持つテーブルを作成してみます。

create table numtest(num1 decimal(5, 2) unsigned);

符号なし(UNSIGNED)(1)

0 または 正の値の格納できる範囲は変わっていませんが、負の値は格納することができません。よって -10.12 のような負の値は格納しようとすると Out of range value for column 'カラム名' というエラーとなります。

insert into numtest values(-10.12);

符号なし(UNSIGNED)(2)

ZEROFILL

データ型に ZEROFILL をつけるとデータ型の桁数分 0 で埋められます。

DECIMAL ZEROFILL

※ ZEROFILL を付けると自動的に UNSIGNED が付きます

例として DECIMAL(10, 5) ZEROFILL 型のカラムを持つテーブルを作成してみます。

create table numtest(num1 decimal(10, 5) zerofill);

ZEROFILL(1)

データを追加した後でテーブルのデータを取得してみます。

insert into numtest values(16.725);

ZEROFILL(2)

桁数分だけ0で埋められて表示されます。

-- --

MySQL で利用可能なデータ型の中で固定小数点数型の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。