人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLのSETとENUMについて。

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

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

●質問者: dingding
●カテゴリ:インターネット ウェブ制作
✍キーワード:enum MySQL SET いまいち データ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● chuken_kenkou
●60ポイント

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 型

◎質問者からの返答

なるほど!

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ