整数型(TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT)

MySQL で利用可能なデータ型の中で整数型(TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT)の使い方について解説します。

(Last modified: )

整数型のデータ型一覧

整数型は扱える数の範囲が異なる次の5つの種類が用意されています。

TINYINT[(M)] [UNSIGNED] [ZEROFILL]
符号付きの範囲は -128 から 127 。符号なしの範囲は 0 から 255 。

SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
符号付きの範囲は -32768 から 32767 。符号なしの範囲は 0 から 65535 。

MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
符号付きの範囲は -8388608 から 8388607 。
符号なしの範囲は 0 から 16777215 。

INT[(M)] [UNSIGNED] [ZEROFILL]
符号付きの範囲は -2147483648 から 2147483647 。
符号なしの範囲は 0 から 4294967295 。
別名:INTEGER

BIGINT[(M)] [UNSIGNED] [ZEROFILL]
符号付きの範囲は -9223372036854775808 から 9223372036854775807 。
符号なしの範囲は 0 から 18446744073709551615 。

なお (M) オプションは表示幅を指定し、 ZEROFILL を使用すると数値の左側にゼロを埋めます。 UNSIGNED オプションを指定すると符号なしの整数として扱われ、符号付きの場合よりも範囲が広がります。詳しくはこのあと解説します。

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

create table numtest(num1 smallint, num2 int);

整数型のデータ型一覧(1)

SMALLINT 型に格納できる値は -32768 から 32767 です。 INT 型に格納できる値は -2147483648 から 2147483647 です。この範囲内の値であれば正常に格納することができます。

insert into numtest values(58, 2054);

整数型のデータ型一覧(2)

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

insert into numtest values(50000, 50000);

整数型のデータ型一覧(3)

符号なし(UNSIGNED)

整数型は正の数と負の数を扱うことができますが、データ型の後に UNSIGNED を付けると 0 と正の数しか格納できなくなります。このようなデータ型を符号なし整数型といいます。例えば INT 型を符号なしにするには次のように記述します。

INT UNSIGNED

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

create table numtest(num1 smallint unsigned);

符号なし(UNSIGNED)(1)

符号付き SMALLINT 型に格納可能な値の範囲は 32768 から 32767 でしたが、符号なし SMALLINT 型の場合は 0 から 65535 となります。よって 50000 のような値を格納することができます。

insert into numtest values(50000);

符号なし(UNSIGNED)(2)

逆に符号付き SMALLINT 型だったら格納できた -10 のような負の値は格納しようとすると Out of range value for column 'カラム名' というエラーとなります。

insert into numtest values(-10);

符号なし(UNSIGNED)(3)

ZEROFILL

データ型に ZEROFILL をつけるとデータ型の桁数分 0 で埋められます。例えば INT 型に ZEROFILL を付ける場合は次のように記述します。

INT ZEROFILL

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

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

create table numtest(num1 smallint, num2 smallint zerofill);

ZEROFILL(1)

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

insert into numtest values(160, 160);

select * from numtest;

ZEROFILL(2)

符号なし SMALLINT (ZEROFILL を付けると自動的に UNSIGNED が付くため)で格納できる値の範囲は 0 から 65535 なので、 5 桁分だけ 0 で埋められて表示されます。

最大表示幅

整数型のデータ型は最大表示幅を指定することができます。書式は次の通りです。

INT(M)

Mには幅を表す数値を指定して下さい。指定可能な値は 255 までです。

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

create table numtest(num1 int zerofill, num2 int(5) zerofill);

最大表示幅(1)

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

insert into numtest values(160, 160);

select * from numtest;

最大表示幅(2)

最大表示幅を指定した方のカラムは、指定した 5 桁の値をして表示されています。

なお最大表示幅を指定していても格納可能な数値の範囲が変更になったわけではありません。最大表示幅を超える値を格納した場合は最大表示幅の設定に関係無く表示されます。

insert into numtest values(2544201, 2544201);

select * from numtest;

最大表示幅(3)

-- --

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

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。