MySQLのENUM型とSET型の違い

MySQL
スポンサーリンク

MySQLのデータ型である、

  • ENUM型
  • SET型

は、いずれも、決まったデータを定義しておき、その予め決められたデータを使用できるようにするデータ型。

では、両者のデータ型で何が違うのか?

結論

データを取り扱う際に、

  • ENUM型は1つのデータを取り扱う。
    • HTMLフォームのラジオボタンのようなイメージ
  • SET型は1つまたは複数のデータを取り扱う。
    • HTMLフォームのチェックボックスのようなイメージ

以下はChatGPTさんによる詳細。

ENUM型とSET型の違い

MySQLは、データベース内で使用されるデータ型を多数提供しています。その中でも、ENUM型とSET型は、複数の値から一つまたは複数を選択することができる型です。しかし、それぞれに異なる特徴があります。以下では、ENUM型とSET型の違いについて詳しく解説します。

ENUM型

ENUM型は、指定された値から一つだけを選択できるデータ型です。ENUM型は、列挙値を定義するために使用されます。ENUM型の宣言は以下のようになります。

ENUM('value1', 'value2', 'value3', ...)

ENUM型の定義には、列挙する値をカンマ区切りで指定します。これらの値は、テーブルに挿入する際に使用することができます。ENUM型は、列挙値の中から一つだけを選択することができます。たとえば、以下のようなENUM型の列がある場合、

CREATE TABLE mytable (
    mycolumn ENUM('value1', 'value2', 'value3')
);

SET型

SET型は、指定された値から複数選択することができるデータ型です。SET型は、ENUM型と同様に列挙値を定義するために使用されます。SET型の宣言は以下のようになります。

SET('value1', 'value2', 'value3', ...)

SET型の定義には、列挙する値をカンマ区切りで指定します。これらの値は、テーブルに挿入する際に使用することができます。SET型は、列挙値の中から複数の値を選択することができます。たとえば、以下のようなSET型の列がある場合、

CREATE TABLE mytable (
    mycolumn SET('value1', 'value2', 'value3')
);

mycolumn列には、’value1’、’value2’、’value3’のいずれかの値、またはそれらの組み合わせが格納されます。SET型は、通常、文字列型として扱われますが、整数型の場合もあります。

もう一回聞いてみた↓

ENUM型とSET型の違い(2回目)

MySQLには、列に使用するデータ型の1つとしてENUM型とSET型があります。これらの型は文字列の値を保存するために使用されます。しかし、それぞれの型には異なる特徴があります。この記事では、ENUM型とSET型の違いについて説明します。

ENUM型

ENUM型は、列に許可された値を事前に定義することができるデータ型です。列に設定できる値は、ENUMで定義された値のいずれかでなければなりません。例えば、次のようなENUM型の列を作成することができます。

CREATE TABLE colors (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  color ENUM('red', 'green', 'blue')
);

この例では、colorsテーブルにはidとcolorの2つの列があります。color列は、ENUM型で定義された3つの許可された値のいずれかを格納することができます。

ENUM型の列に設定できる値は、列の定義時に決定されます。つまり、列に追加される新しい値は、列の定義を変更する必要があります。これは、列に追加される値が少ない場合には問題ありませんが、多数の値がある場合には不便なことがあります。

SET型

SET型は、ENUM型と同様に列に許可された値を定義することができます。しかし、SET型では、列に設定できる値の組み合わせを定義することができます。例えば、次のようなSET型の列を作成することができます。

CREATE TABLE days (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  days_set SET('monday', 'tuesday', 'wednesday', 'thursday', 'friday')
);

この例では、daysテーブルにはidとdays_setの2つの列があります。days_set列は、SET型で定義された5つの許可された値のいずれかの組み合わせを格納することができます。例えば、’monday’と’tuesday’の2つの値を持つ行を作成することができます。

INSERT INTO days (days_set) VALUES ('monday, tuesday');

SET型では、列に設定できる値の数が多く、かつ異なる組み合わせが必要な場合に役立ちます。ただし、SET型の列に追加される値は、列の定義を変更する必要があります。

その他サイトのご説明

MySQLのENUMおよびSET型は、文字列型に分類されるMySQL独自のデータ型です。ENUM型はプルダウン式の選択ボックスやラジオボタン、一方、SET型は複数のチェックボックスにうまく適用できそうなデータ型だと思います。

エンタープライズ:MySQL独自のENUM・SET型を使ってみよう

1.7.3.4 ENUM および SET の制約
– ENUM カラムには常にデフォルト値があります。デフォルトでない値を指定した場合、NULL を指定できるカラムではこの値は NULL になり、それ以外のカラムではカラム定義の最初の列挙値になります。
– SET カラムに不正な値を挿入した場合、その値は無視されます。たとえば、カラムが ‘a’、’b’、および ‘c’ の値を含む場合、’a,x,b,y’ を割り当てようとすると ‘a,b’ の値になってしまいます。

MySQL :: MySQL 8.0 リファレンスマニュアル :: 1.7.3.4 ENUM および SET の制約

ENUM型は、

都道府県の名前のように固定的で不変なデータを扱うのに向いています。

第44回 MySQLで扱える文字列型の種類を理解する | gihyo.jp
第41回では、CHAR型とVARCHAR型の違いについて簡単に説明を行いました。しかし、MySQLにはそれ以外にも文字列を扱うことができる型が複数あります。そこで今回はMySQLで扱える文字列型について紹介していきます。

SET型は、

SET型はテーブル作成時に設定した文字列を0個以上選択することが出来るデータ型です。

コメント