ENUM型

MySQL で利用可能なデータ型の中で文字列型の ENUM 型の使い方について解説します。

(Last modified: )

ENUM型について

文字列型の中でも ENUM 型は次のようなデータ型です。

ENUM('value1','value2',...) [CHARACTER SET charset_name]
 [COLLATE collation_name]

リストから選択された値を 1 つだけを持つことができます。
ENUM 値は、内部では整数として表されます。
ENUM カラムには、最大 65,535 個の個別の要素を含めることができます。

ENUM 型では文字列定数をリストします。このデータ型が設定されたカラムに値を格納する場合、このリストの中の文字列定数の一つを指定します。

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

create table strtest(product varchar(8), num1 enum('Blue', 'Yellow', 'White'));

ENUM型について(1)

ENUM 型のカラムには値として 'Blue' 、 'Yello' 、 'White' がリストされています。よってこのカラムにはこの3つの文字列のいずれか(および NULL )しか格納することはできません。

例えば次のようなデータを追加することができます。

insert into strtest values('Desk', 'Blue');
insert into strtest values('Mouse', 'White');

ENUM型について(2)

リストに含まれていない値を格納しようとすると Data truncated for column 'カラム名' というエラーが発生します。

insert into strtest values('PC', 'Green');

ENUM型について(3)

ENUM 型を使うとカラムに格納することができる値を簡単に制限することができます。また別のメリットとして文字列をそのままカラムに保存する場合と比べて、 ENUM 型のカラムの値は内部的には整数の値が保存されています。よって必要となる容量を少なくすることができます。

NULLの扱い

NULL は ENUM 型のリストに含まれていない場合でもデータとして格納することができます。先ほど作成したテーブルに次のようなデータを追加してみます。

insert into strtest values('Printer', NULL);

NULLの扱い(1)

それではテーブルからデータを取得してみます。

select * from strtest;

NULLの扱い(2)

NULL はそのまま NULL として格納されます。

ENUM型のインデックス

ENUM 型にリストされた文字列定数には順にインデックスが割り当てられます。インデックスは 1 から開始されます。

他にも何らかの理由で無効な値が格納されそうになった時は空文字 '' が格納されますが、空文字のインデックスは常に 0 です。また NULL のインデックスは NULL です。

ENUM('Blue','Yellow','White')

''         インデックス 0
'Blue'     インデックス 1
'Yellow'   インデックス 2
'White'    インデックス 3
NULL       NULL

ENUM型が設定されているカラムにデータを追加する場合、文字列の代わりにインデックスを指定することができます。例として先ほど作成したテーブルに次のようなデータを追加してみます。

insert into strtest values('Display', 1);

このカラムのインデックス 1 に相当する値は 'Blue' なので 'Blue' が格納されています。

ENUM型のインデックス(1)

また WHERE 句の値としてインデックスを指定することもできます。つまり次の2つのSELECT文は同じ結果を取得できます。

select * from strtest where num1 = 'Blue';
select * from strtest where num1 = 1;

ENUM型のインデックス(2)

文字セットと照合順序

ENUM 型は文字セットと照合順序を指定することができます。使い方は次の通りです。

ENUM('value1','value2',...) [CHARACTER SET 文字セット]
[COLLATE 照合順序]

文字セットと照合順序の設定については CHAR 型などと同じです。詳しくは「CHAR型とVARCHAR型」を参照して下さい。

-- --

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

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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