MySQL 8.0 【データ型 】整数型・固定小数点型・浮動小数点型

スポンサーリンク
スポンサーリンク

整数型

参考サイト MySQL8.0リファレンスマニュアル 数値型の概要

バイト 符号付き 符号なし
最小値 最大値 最小値 最大値
TINYINT 1 -128 127 0 255
SMALLINT 2 -32768 32767 0 65535
MEDIUMINT 3 -8388608 8388607 0 16777215
INT 4 -2147483648 2147483647 0 4294967295
BIGINT 8 -9223372036854775808 9223372036854775807 0 18446744073709551615

整数型は5種類用意されていますが、各データ型には格納できる値の範囲が決まっています。範囲を超えた値の格納はできません。

※厳密な値

UNSIGNED

UNSIGNEDは、符号を使わない時に使用する装飾子です。

整数型にUNSIGNEDを付けることにより、符号用を使わず数値のみを表すため正の数の記憶領域が符号付きの最小値の分増加します。

各型には記憶領域が決まっているため、正の数の記憶領域を増やしたい時などに便利です。

TINYINTの例でみると 最大値127+128=255 となります。

考え方は、算数と同じで 最小値を0とした場合 符号付きの最大値127に符号付き最小値を移行して足し算すれば、数値255になります。

以下のようにtest1のテーブルに通常のidtinyintと符号なしのidtinyint_uのカラムを作成し

create table test1(idtinyint tinyint,idtinyint_u tinyint unsigned);

test1のテーブルに最大値を指定しました。

insert into test1 (idtinyint,idtinyint_u) values (127,255);

すると以下のようにunsignedを指定したカラムには最大値255までが指定可能ですがこの最大値以上の値はエラーとなります。

ZEROFILL

ZEROFILLは数値の前に0を挿入してくれる装飾子です。

数値の前に0を付けたい場合に用いられます。

使用例:

INT(5)ZEROFILL

この場合(値)を1と入力した場合、自動で数値の前に0を付加してくれるため

00001のような表示になります。

例) 1 → 00001 のように自動で0を付加してくれます。

数値の前に0を付けたい時に便利な装飾子です。

※ZEROFILLを指定した場合、そのカラムはUNSIGNEDになります。

以下のようにtest2のテーブルに通常のidtinyintとzelofillを設定したidtinyint_uのカラムを作成し

create table test2(idtinyint tinyint,idtinyint_u tinyint zerofill);

両方のカラムに値に1を設定しました。

insert into test2 (idtinyint,idtinyint_u) values (1,1);

するとzelofillを設定した方には数値の前に0が挿入されているのがわかると思います。

zelofillを設定した時の注意点

まず、分かりやすいようにzelofillを設定した時のデーブルの構造を確認してみましょう!

show columns from test2;

するとzellofillを設定した方には自動的にunsignedが設定されています。

zellofillを設定すると整数の値の前に0が入ります。

これは、個人的な考え方なのですが、

-1 という表現はあっても

-0001 という表現はありませんね。

よってzellfillを設定すれば正の数のみ表現するunsignedも自動的に付加されると考えると納得できるのではないでしょうか?

DECIMAL、NUMERIC 固定小数点型

参考サイト MySQL8.0リファレンスマニュアル固定小数点型(厳密な値)

全桁数と小数点以下桁数を指定できる「固定小数点値用」のデータ型です。MySQLでは、全桁数65、小数点以下桁数30が最大指定できます。

指定方法:

decimal(トータルの桁数,小数点の桁数);

使用例:以下のようにtest4テーブルを4つのカラムで作った場合

カラム名(id_d) : decimal(桁数指定なし)

カラム名(id_n) :numeric(65,2)

カラム名(id_dz) : decimal(65,30)

カラム名(id_nz) : numeric(10,2)zerofillを指定

create table test4 (
 id_d decimal,
 id_n numeric(65,2),
 id_dz decimal(65,30),
 id_nz numeric(10,2)zerofill
 );

まず、分かりやすいように設定した時のテーブルの構造を確認してみましょう!

show columns from test4;

すると

以下のように

・numericを指定してもデータとして保存される形式はdecimal。

・zellfillを指定できる。

・数値を指定しない場合、整数値は 10 で 小数点値は 0 になります。

id_nzの場合ですと総桁数が10で小数点の桁数が2ですので、

「-99999999.99~99999999.99」の範囲が扱えるようになります。

※固定小数点型は、厳密な値として保存されます。

FLOAT、DOUBLE 浮動小数点型

参考サイト MySQLリファレンスマニュアル8.0浮動小数点型

近似数値データ値を表します。MySQLは、単精度値に4バイト、倍精度値に8バイトを使用します。

FLOAT型とDOUBLE型には精度と小数点以下の桁数を指定することができます。

指定方法:

float (トータルの桁数,小数点以下の桁数)
double (トータルの桁数,小数点以下の桁数)

テスト:

どのように桁表示されるか試してみました。

まずintとvarchar以外は同条件で以下のテーブルを作って同じ値を入れてみました。

create table test5(
  id_varchar varchar(255)default null,
  id_f float(20,10)default null,
  id_do double(20,10)default null,
  id_de decimal(20,10)default null,
  id_int int(11)default null
 );

id_varchar :varchar型

id_f           :float型

id_do        :double型

id_de        :decimal型

id_int        :int型

で、入力した値はvarchar型の値です。

floatは小数点第7位くらいまではあってますが、double型の方が数値的に正確ですね。

にほんブログ村 IT技術ブログへ

スポンサーリンク
スポンサーリンク
SNSフォローボタン

フォローする

スポンサーリンク
スポンサーリンク