SET
型は、ゼロ以上の値を持つことができる文字列オブジェクトです。これらの値はいずれもテーブルの作成時に指定された使用可能な値のリストから選択する必要があります。SET
型のカラム値が複数の要素で構成される場合は、各要素間をカンマ(‘,
’)で区切ります。このことから、SET
要素の値自体には、カンマを使用できません。
たとえば、SET("one", "two") NOT NULL
として指定されたカラムは、次に示す値のいずれかを取ります。
"" "one" "two" "one,two"
SET
には最大 64
個の異なる要素を組み込むことができます。
3.23.51 以降、SET
値の後続のスペースはテーブルの作成時に自動で削除されます。
MySQL では、SET
値は数値として格納されます。格納値の最下位のビットが最初のセット要素に対応します。SET
値を数値型のコンテキストで取り出すと、取り出される値は、カラム値を構成するセット要素に対応するビットセットを持ちます。たとえば、次のように、SET
型のカラムから数値を取り出すことができます。
mysql> SELECT set_col+0 FROM tbl_name;
SET
型のカラムに数値を格納する場合、その数値のバイナリ表現に設定されたビットによって、カラム値のセット要素が決まります。たとえば、カラムが
SET("a","b","c","d")
として指定されているとします。この場合、セット要素は次のビット値を持ちます。
SET 要素
|
10 進数 | 2 進数 |
a |
1 |
0001 |
b |
2 |
0010 |
c |
4 |
0100 |
d |
8 |
1000 |
このカラムに値 9
を割り当てた場合、2 進数では
1001
になるため、SET
値の 1 番目と 4
番目の要素である "a"
と
"d"
が選択され、結果の値は
"a,d"
になります。
SET
要素を複数持つ値では、値の挿入時には、要素を列記する順序は重要ではありません。値の中で特定の要素を列記する回数も重要ではありません。
その後、値を取り出すときには、値内の各要素は
1
回のみ出現し、テーブルの作成時に指定された順序でそれぞれの要素が列記されます。たとえば、カラムが
SET("a","b","c","d")
として指定されている場合、このカラムの値を取り出したときには、"a,d"
、"d,a"
、"d,a,a,d,d"
はいずれも "a,d"
として表現されます。
SET
型のカラムに非サポート値を設定すると、その値は無視されます。
SET
型の値は数値としてソートされます。NULL
値は非 NULL
SET
値より前にソートされます。
次に示すように、通常、SET
型のカラムに対する SELECT
操作には、LIKE
演算子または
FIND_IN_SET()
関数を使用します。
mysql>SELECT * FROM tbl_name WHERE set_col LIKE '%value%';
mysql>SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col)>0;
次のステートメントも有効です。
mysql>SELECT * FROM tbl_name WHERE set_col = 'val1,val2';
mysql>SELECT * FROM tbl_name WHERE set_col & 1;
これらのステートメントの最初のものでは、完全に一致するものが検索されます。2 番目のステートメントでは、最初のセット要素を持つ値が検索されます。
SET
型のカラムの使用可能なすべての値が必要な場合は、SHOW
COLUMNS FROM table_name LIKE set_column_name
を使用し、2 番目のカラムで SET
定義を解析します。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.