1.8.3.4 ENUM および SET の制約

ENUM および SET カラムによって、特定の値セットのみを含むカラムを効率的に定義することができます。セクション11.4.4「ENUM 型」およびセクション11.4.5「SET 型」を参照してください。ただし、MySQL 5.0.2 以前では、ENUM および SET カラムは無効な値のエントリに対する実際の制約はありません。

  • ENUM カラムには常にデフォルト値があります。デフォルトでない値を指定した場合、NULL を指定できるカラムではこの値は NULL になり、それ以外のカラムではカラム定義の最初の列挙値になります。

  • ENUM カラムに不正な値を挿入した場合、または IGNORE を付けた ENUM カラムに強制的にある値を指定した場合は、予約された列挙値である 0に設定され、文字列コンテキストでは空の文字列として表示されます。

  • SET カラムに不正な値を挿入した場合、その値は無視されます。たとえば、カラムが 'a''b'、および 'c' の値を含む場合、'a,x,b,y' を割り当てようとすると 'a,b' の値になってしまいます。

MySQL 5.0.2 以降では、厳密 SQL モードを使用するようにサーバーを構成できます。セクション5.1.7「サーバー SQL モード」を参照してください。厳密モードを有効にすると、ENUMSET カラムの定義は、カラムに入力した値に対して制約として機能します。これらの条件を満たさない値には、エラーが発生します。

  • ENUM 値は、カラム定義に一覧表示されている値のいずれかか、それと内部数値的に同等のものである必要があります。その値はエラー値 (つまり、0 または空の文字列) にはなりえません。ENUM('a','b','c') として定義されたカラムでは、'''d''ax' などの値は無効であり拒否されます。

  • SET 値は空の文字列にするか、カンマで区切られたカラム定義に一覧表示されている値だけから構成された値にする必要があります。SET('a','b','c') として定義されたカラムの場合、'd''a,b,c,d' などの値は無効であり拒否されます。

無効な値に対するエラーは、INSERT IGNORE または UPDATE IGNORE を使用している場合、厳密モードで抑制できます。この場合、エラーではなく警告が発せられます。ENUM に対しては、その値はエラーメンバー (0) として挿入されます。SET に対しては、無効な部分文字列が削除されるという点を除いて、その値は与えられたとおりに挿入されます。たとえば、'a,x,b,y''a,b' の値となります。


User Comments
  Posted by flobee (c) on November 6, 2005
like already metioned: "An ENUM value must be one of those listed ..."
when fetching enum fields eg. to an array:
enum('a','b','c') == array(1=>'a', 2=>'b', 3=>'c')
Sign Up Login You must be logged in to post a comment.