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

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

(Last modified: )

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

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

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

全体の最大桁数 (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);
insert into numtest values(-189.4);

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

テーブルからデータを取得します。

select * from numtest;

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

小数点以下の桁数として 2 を指定しているため、 2 番目のデータのように小数点以下の桁数が 2 よりも少ない値を格納すると、指定した桁数の分だけ 0 で埋められて値が格納されます。

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

insert into numtest values(24128.4);

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

ただし、小数点以下の桁数が指定の範囲を超える桁数を格納しようとした場合は、指定の桁数で四捨五入されます。例えば DECIMAL(5, 2) 型のカラムに 30.76954 のような値を格納しようとした場合、小数点以下2桁のとこで四捨五入されて 30.77 が格納されます。この場合はエラーにはなりません。

insert into numtest values(30.76954);

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

テーブルからデータを取得します。

select * from numtest;

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

テーブルに 30.77 が格納されているのが確認できます。

符号なし(UNSIGNED)

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

DECIMAL UNSIGNED

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

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

符号なし(UNSIGNED)(1)

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

insert into numtest values(37.25);
insert into numtest values(-189.4);

符号なし(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);

select * from numtest;

ZEROFILL(2)

小数点以下の桁数は指定した桁数分だけ 0 で埋められていましたが、整数部分についても全体の桁数の分だけ 0 で埋められてデータが格納されています。

-- --

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

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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