【MySQL】文字列列挙型(ENUM / SET)

【MySQL】文字列列挙型(ENUM / SET)

MySQLの文字列の列挙型について解説します。

検証環境

文字列の列挙型

文字列の列挙型は“定義済みの値のみ保持できる文字列の型”です。

文字列の列挙型
意味
ENUM 定義済みの1つの値
SET 定義済みの複数の値

ENUM

ENUMは“定義済みの値を1つだけ保持する文字列型”です。

基本構文

カラム名 ENUM(値1, 値2 ...)

ENUMに続いて丸括弧(())を記述し、その中に保持可能な文字列をカンマ(,)区切りで定義します。

サンプル

mysql> CREATE TABLE sample ( str ENUM('Apple', 'Orange', 'Pineapple', 'Grapes') );
Query OK, 0 rows affected (0.01 sec)

mysql> DESC sample;
+-------+---------------------------------------------+------+-----+---------+-------+
| Field | Type                                        | Null | Key | Default | Extra |
+-------+---------------------------------------------+------+-----+---------+-------+
| str   | enum('Apple','Orange','Pineapple','Grapes') | YES  |     | NULL    |       |
+-------+---------------------------------------------+------+-----+---------+-------+
1 row in set (0.01 sec)

mysql> INSERT INTO sample VALUE ( 'Apple' );
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO sample VALUE ( 'Pineapple' );
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM sample;
+-----------+
| str       |
+-----------+
| Apple     |
| Pineapple |
+-----------+
2 rows in set (0.00 sec)

mysql> INSERT INTO sample VALUE ( 'Melon' );
ERROR 1265 (01000): Data truncated for column 'str' at row 1

※ 定義以外の文字列を格納しようとするとエラーが発生します。

SET

SETは“定義済みの値を複数個保持する文字列型”です。

基本構文

カラム名 SET(値1, 値2 ...)

ENUMと同様にSETに続いて丸括弧(())を記述し、その中に保持可能な文字列をカンマ(,)区切りで定義します。

サンプル

mysql> CREATE TABLE sample ( str SET('Apple', 'Orange', 'Pineapple', 'Grapes') );
Query OK, 0 rows affected (0.01 sec)

mysql> DESC sample;
+-------+--------------------------------------------+------+-----+---------+-------+
| Field | Type                                       | Null | Key | Default | Extra |
+-------+--------------------------------------------+------+-----+---------+-------+
| str   | set('Apple','Orange','Pineapple','Grapes') | YES  |     | NULL    |       |
+-------+--------------------------------------------+------+-----+---------+-------+
1 row in set (0.01 sec)

mysql> INSERT INTO sample VALUE ( 'Apple' );
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO sample VALUE ( 'Pineapple,Grapes' );
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO sample VALUE ( 'Apple,Orange,Grapes' );
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM sample;
+---------------------+
| str                 |
+---------------------+
| Apple               |
| Pineapple,Grapes    |
| Apple,Orange,Grapes |
+---------------------+
3 rows in set (0.00 sec)

値を複数指定する場合はカンマ区切りで記述します。