ENUM
型は、テーブルの作成時にカラムの仕様で明示的に列挙された使用可能な値のリストから、通常、値が選択される文字列オブジェクトです。
次に示すように、一定の状況では、空の文字列(""
)または
NULL
も値として使用できます。
不正な値(使用可能な値のリストに含まれない文字列)を
ENUM
型のカラムに挿入すると、特殊なエラー値として、空の文字列が挿入される。この文字列は数値
0 を持つため、'通常'
の空の文字列とは区別することができる(これについては後述)。
ENUM
型が NULL
として宣言されている場合、そのカラムでは
NULL
も正しい値となり、デフォルト値は
NULL
になる。ENUM
型が NOT
NULL
として宣言されている場合は、使用可能な値の最初の要素がデフォルト値として使用される。
次に示すように、各列挙値にはインデックスを付けることができる。
カラムの仕様の使用可能な要素のリストに含まれる値は 1 から順に番号付けされる。
空の文字列エラー値のインデックス値は
0。したがって、次の SELECT
ステートメントでは、無効な
ENUM
が割り当てられているレコードを検索できる。
mysql> SELECT * FROM tbl_name WHERE enum_col=0;
NULL
値のインデックスは
NULL
。
たとえば、ENUM("one", "two", "three")
として指定されたカラムの場合、次の値のいずれかを取ります。それぞれの値では、対応するインデックスも示しています。
値 | インデックス |
NULL |
NULL |
"" |
0 |
"one" |
1 |
"two" |
2 |
"three" |
3 |
列挙には、最大 65535 個の要素を組み込むことができます。
3.23.51 以降、ENUM
値の後続のスペースはテーブルの作成時に自動で削除されます。
ENUM
型のカラムに値を割り当てる際には、大文字と小文字の区別はありません。その後、カラムから取り出される値では、大文字と小文字が区別されます。この区別は、テーブルの作成時に使用可能な値として指定された値に基づいて決まります。
ENUM
型の値を数値のコンテキストで取り出すと、そのカラム値のインデックスが返されます。たとえば、ENUM
型のカラムから次のような数値を取り出すことができます。
mysql> SELECT enum_col+0 FROM tbl_name;
ENUM
型のカラムに数値を格納すると、その数値はインデックスとして扱われ、そのインデックスを持つ列挙要素が値として格納されます(ただし、LOAD
DATA
においては異なり、すべての入力が文字列として扱われます)。
まぎらわしいので、ENUM
型の文字列には数値を含めないようにしてください。
ENUM
型の値は、カラムの仕様で列挙要素がリストされたときの順序にもとづいてソートされます(つまり、ENUM
はインデックス番号順にソートされます)。たとえば、ENUM("a",
"b")
の場合、"a"
は
"b"
の前にソートされますが、ENUM("b",
"a")
の場合は、"b"
が
"a"
の前にソートされます。空の文字列は空以外の文字列の前にソートされ、NULL
値はその他すべての列挙値の前にソートされます。
予期しない結果が起こらないよう、ENUM
リストはアルファベット順に指定するようにします。また、GROUP
BY CONCAT(col)
を使用して、カラムがインデックス番号順ではなく、アルファベット順に確実にソートされるようにすることもできます。
ENUM
型のカラムの使用可能なすべての値が必要な場合は、SHOW
COLUMNS FROM table_name LIKE enum_column_name
を使用し、2 番目のカラムで ENUM
定義を解析します。
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.