MySQLのSETとENUMについて。


MYSQLで配列のような使い方のできるのデータ型を探したところ、SETとENUMがそれっぽいことは分かりましたが、いまいち理解し切れません。

配列のように値を後ろに追加したり、配列の中の○番目の値が参照できるような使い方に適しているのは、
どちらでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2007/11/10 02:50:50
  • 終了:2007/11/10 13:30:49

回答(1件)

id:chuken_kenkou No.1

chuken_kenkou回答回数722ベストアンサー獲得回数542007/11/10 07:55:23

ポイント60pt

MYSQLで配列のような使い方のできるのデータ型を探したところ、SETとENUMがそれっぽい

ENUMに関しては、違います。

SETに関しては、複数の値を持つことは可能ですが、特定の値を何番目に持つといった性質ではありません。

ENUMもSETも、保持する可能性のある値を予め決めた上で、表定義する必要があります。

そういう点では、ユーザ定義型に近いものです。

ENUMは、値リストで指定したもののうち、1個の値だけを保持できます。

SETは、値リストで指定したもののうち、複数個の値を保持できますが、保持順序は格納時の値の指定順でなく、SETの値リストで定義した順になります。

これらは、ENUM、SETの値の管理方式を調べれば、なぜこういう方式になっているのか理解できると

思います。

例えば、以下のような表定義を行ったとします。

create table tbl1
(id       int  primary key,
 name     varchar(10),
 sex      ENUM('male','female'),
 lng      SET('japanese','english','french','spanish','chinese','korean')
)

データの格納は、以下のように行います。

insert into tbl1 values(1,'a','male','japanese');
insert into tbl1 values(2,'b','female','english,korean');
insert into tbl1 values(3,'c','female','chinese,spanish,japanese');
select * from tbl1

での検索結果は、下記のようになります。

+----+------+--------+--------------------------+
| id | name | sex    | lng                      |
+----+------+--------+--------------------------+
| 1  | a    | male   | japanese                 |
| 2  | b    | female | english,korean           |
| 3  | c    | female | japanese,spanish,chinese |
+----+------+--------+--------------------------+

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 6.2.3.3 ENUM 型

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 6.2.3.4 SET 型

id:dingding

なるほど!

とってもすっきりしました。

大変詳しい解説ありがとうございます。

2007/11/10 13:30:26

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません