ENUM
        は、テーブルを作成する際カラム仕様の中で明確に列挙された許容値リストから選択された値を持つ文字列オブジェクトです。
      
列挙値は引用された文字列直定数である必要があります。これは、式でも、文字列値を評価するものでもありません。これは、ユーザ変数を列挙値として採用するべきではないという事も意味します。
        その値は、特定の条件下では('')や
        NULL
        の空の文字列になる事もあります。
      
            もし ENUM
            に無効な値(許容値リストに存在しない文字列)を挿入すると、特別エラー値として空の文字列が代わりに挿入されます。この文字列は、ゼロの数値を持つという点で、「通常の」
            空の文字列とは区別することができます。
            この後でもう少し詳しく説明します。
          
            もしストリクトSQLモードが有効なら、無効な
            ENUM
            値を挿入しようとするとエラーが発生します。
          
            もし ENUM カラムが
            NULL
            の許容を宣言すると、NULL
            値はそのカラムにとって正当な値となり、デフォルト値は
            NULL になります。もし
            ENUM カラムが NOT
            NULL
            を宣言すると、許容値リストの最初の要素がそのデフォルト値となります。
          
それぞれの列挙値はインデックスを持ちます。
カラム仕様の中の許容可能エレメントリストからの値は1から始まる番号がつけられています。
            空の文字列エラーインデックス値は0です。これは、どの無効な
            ENUM
            値に行が指定されたのかを見つける為に、次の
            SELECT
            ステートメントを利用する事ができるという事を意味します。
          
mysql> SELECT * FROM tbl_name WHERE enum_col=0;
            NULL 値のインデックスは
            NULL です。
          
「インデックス」 という言葉は、列挙値リストの中の位置だけを表しています。これは、テーブルインデックスとは全く関係がありません。
        例えば、ENUM('one', 'two',
        'three')
        として指定されたカラムはここに表されている値のどれでも持つ事ができます。それぞれの値のインデックスも表示されています。
      
| 値 | インデックス | 
| NULL | NULL | 
| '' | 0 | 
| 'one' | 1 | 
| 'two' | 2 | 
| 'three' | 3 | 
1つの列挙は最大65,535エレメントを持つ事ができます。
        テーブルが作成された時に、テーブル定義の中の
        ENUM
        メンバー値から後続スペースが自動的に削除されます。
      
        検索された時は、ENUM
        カラムに格納された値はカラム定義で使用されたレターケースで表示されます。ENUM
        カラムは文字セットと照合に指定できる事を覚えて置いてください。バイナリ、またはケースに敏感な照合には、カラムに値を指定する時レターケースが考慮されます。
      
        もし ENUM
        値を数値コンテキストで検索するなら、カラム値のインデックスは返されます。例えば、このようにして
        ENUM
        カラムから数値を検索する事ができます。
      
mysql> SELECT enum_col+0 FROM tbl_name;
        もし ENUM
        カラムに数字を格納すると、その数字は可能値のインデックスとして扱われ、格納された値はそのインデックスを持つ列挙番号となります。(しかしこれは全ての入力を文字列として扱う
        LOAD DATA とは機能
        しません。)もし数値が引用されると、列挙値リストの中に適合する文字列がなければ、そのままインデックスとして解釈されます。これらの理由により、ENUM
        カラムを数字のように見える列挙値で定義する事は、複雑になり得るので
        お勧めできません。例えば、次のカラムは
        '0'、'1'、そして
        '2'
        の文字列値のある列挙番号を持ちますが、1、2、そして
        3
        の数値インデックス値は次のようになります。
      
numbers ENUM('0','1','2')
        もし 2
        を格納すると、それはインデックス値として解釈され、'1'
        となります。 (インデックス2の値)もし
        '2'
        を格納すると、それは列挙値と適合するので
        '2'
        として格納されます。もし
        '3'
        を格納すると、どの列挙値とも適合しないのでインデックスとして扱われ、'2'
        となります。 (インデックス3の値)
      
mysql>INSERT INTO t (numbers) VALUES(2),('2'),('3');mysql>SELECT * FROM t;+---------+ | numbers | +---------+ | 1 | | 2 | | 2 | +---------+
        ENUM
        値は、カラム仕様にリストされた列挙番号の順番に従ってソートされます。(言い換えると、ENUM
        値はそれらのインデックス番号によってソートされるという事になります。)例えば、'a'
        は ENUM('a', 'b') では
        'b'
        の前にソートしますが、'b'
        は ENUM('b', 'a') では
        'a'
        の前にソートします。空の文字列は、空ではない文字列の前にソートし、そして
        NULL
        値はその他の全ての列挙値の前にソートします。予期しない結果を防ぐ為には、ENUM
        リストをアルファベット順に指定してください。カラムがインデックス番号ではなく、語彙的にソートされる為に、GROUP
        BY CAST(col AS CHAR) か GROUP BY
        CONCAT(col) を利用する事もできます。
      
        ENUM
        カラムに有効な全ての値を究明したければ、SHOW
        COLUMNS FROM 
        を利用し、アウトプットの tbl_name LIKE
        enum_colType
        カラムの中の ENUM
        定義を解析してください。
      

