mysqlのENUMタイプ
ENUMは、テーブル作成時にカラム規定で明示的に列挙されたカラム値からの文字列オブジェクトです.
場合によっては、ENUM値は空の文字列(')またはNULLであってもよい.
・ENUM(つまり、許可されている値列以外の文字列)に不正な値を挿入すると、特殊なエラー値として空の文字列が挿入されます.この文字列は、数値値0の「通常」空の文字列とは異なります.後で詳しく議論します.
・ENUM列がNULLを許可すると宣言された場合、NULL値はその列の有効な値であり、デフォルト値はNULLである.ENUM列がNOT NULLとして宣言された場合、デフォルト値は許可された値列の1番目の要素です.
列挙値ごとにインデックスがあります.
・列に規定された許容値列からの値は1から番号付けする.
・空の文字列エラー値のインデックス値は0です.これは、次のSELECT文を使用して、不正なENUM値が割り当てられた行を見つけることができることを示しています.
・NULL値のインデックスはNULLです.
たとえば、ENUMとして定義されたカラム('one','two','three')には、以下に示す値があります.各値のインデックスも表示されます.
値
索引
NULL
NULL
''
0
'one'
1
'two'
2
'three'
3
列挙には最大65535個の要素があります.
テーブルを作成すると、ENUMメンバー値の末尾スペースが自動的に削除されます.
取得すると、ENUMカラムに保存された値は、カラム定義で使用されている大文字と小文字で表示されます.ENUM列に文字セットと校正規則を割り当てることができることに注意してください.バイナリまたは大文字と小文字に敏感な照合ルールでは、カラムに値を割り当てるときに大文字と小文字を考慮します.
数値コンテキストでENUM値を取得すると、カラム値のインデックスが返されます.たとえば、ENUM列から数値値を検索できます.
1つの数値をENUM列に保存すると、数値はインデックスとみなされ、保存された値はインデックスに対応する列挙メンバーです.(ただし、これはLOAD DATAには向いておらず、すべての入力を文字列と見なしています).混同を引き起こしやすいため、ENUM列を定義するには、数値のような列挙値を使用することは推奨されません.たとえば、次の列には、文字列値'0'、'1'および'2'の列挙メンバーが含まれますが、数値インデックス値は1、2、および3です.
列挙メンバーが列定義にリストされる順序に従ってENUM値をソートします.(換言すれば、ENUM値はインデックス番号に基づいてソートされる).例えば、ENUM('a','b'),'a'は'b'の前に並ぶが、ENUM('b','a'),'b'は'a'の前に並ぶ.空の文字列は、空でない文字列の前に配置され、NULL値は他のすべての列挙値の前に配置されます.予期せぬ結果を防ぐためには、ENUM列をアルファベット順に規定します.また、GROUP BY CAST(col AS CHAR)またはGROUP BY CONCAT(col)を使用して、インデックス数字ではなく語彙に従って列をソートすることもできます.
ENUM列のすべての可能な値を決定するには、SHOW COLUMNS FROM tbl_を使用します.name LIKE enum_col,出力の2列目のENUM定義を解析する.
場合によっては、ENUM値は空の文字列(')またはNULLであってもよい.
・ENUM(つまり、許可されている値列以外の文字列)に不正な値を挿入すると、特殊なエラー値として空の文字列が挿入されます.この文字列は、数値値0の「通常」空の文字列とは異なります.後で詳しく議論します.
・ENUM列がNULLを許可すると宣言された場合、NULL値はその列の有効な値であり、デフォルト値はNULLである.ENUM列がNOT NULLとして宣言された場合、デフォルト値は許可された値列の1番目の要素です.
列挙値ごとにインデックスがあります.
・列に規定された許容値列からの値は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個の要素があります.
テーブルを作成すると、ENUMメンバー値の末尾スペースが自動的に削除されます.
取得すると、ENUMカラムに保存された値は、カラム定義で使用されている大文字と小文字で表示されます.ENUM列に文字セットと校正規則を割り当てることができることに注意してください.バイナリまたは大文字と小文字に敏感な照合ルールでは、カラムに値を割り当てるときに大文字と小文字を考慮します.
数値コンテキストでENUM値を取得すると、カラム値のインデックスが返されます.たとえば、ENUM列から数値値を検索できます.
mysql>
SELECT enum_col+0 FROM tbl_name;
1つの数値をENUM列に保存すると、数値はインデックスとみなされ、保存された値はインデックスに対応する列挙メンバーです.(ただし、これはLOAD DATAには向いておらず、すべての入力を文字列と見なしています).混同を引き起こしやすいため、ENUM列を定義するには、数値のような列挙値を使用することは推奨されません.たとえば、次の列には、文字列値'0'、'1'および'2'の列挙メンバーが含まれますが、数値インデックス値は1、2、および3です.
numbers ENUM('0','1','2')
列挙メンバーが列定義にリストされる順序に従ってENUM値をソートします.(換言すれば、ENUM値はインデックス番号に基づいてソートされる).例えば、ENUM('a','b'),'a'は'b'の前に並ぶが、ENUM('b','a'),'b'は'a'の前に並ぶ.空の文字列は、空でない文字列の前に配置され、NULL値は他のすべての列挙値の前に配置されます.予期せぬ結果を防ぐためには、ENUM列をアルファベット順に規定します.また、GROUP BY CAST(col AS CHAR)またはGROUP BY CONCAT(col)を使用して、インデックス数字ではなく語彙に従って列をソートすることもできます.
ENUM列のすべての可能な値を決定するには、SHOW COLUMNS FROM tbl_を使用します.name LIKE enum_col,出力の2列目のENUM定義を解析する.