ENUM
and
SET
columns provide an
efficient way to define columns that can contain only a given
set of values. See Section 10.4.4, “The ENUM
Type”, and
Section 10.4.5, “The SET
Type”. However, before MySQL 5.0.2,
ENUM
and
SET
columns do not provide true
constraints on entry of invalid data:
ENUM
columns always have a
default value. If you specify no default value, then it is
NULL
for columns that can have
NULL
, otherwise it is the first
enumeration value in the column definition.
If you insert an incorrect value into an
ENUM
column or if you force
a value into an ENUM
column
with IGNORE
, it is set to the reserved
enumeration value of 0
, which is
displayed as an empty string in string context.
If you insert an incorrect value into a
SET
column, the incorrect
value is ignored. For example, if the column can contain
the values 'a'
, 'b'
,
and 'c'
, an attempt to assign
'a,x,b,y'
results in a value of
'a,b'
.
As of MySQL 5.0.2, you can configure the server to use strict
SQL mode. See Section 5.1.7, “Server SQL Modes”. With strict
mode enabled, the definition of a
ENUM
or
SET
column does act as a
constraint on values entered into the column. An error occurs
for values that do not satisfy these conditions:
An ENUM
value must be one
of those listed in the column definition, or the internal
numeric equivalent thereof. The value cannot be the error
value (that is, 0 or the empty string). For a column
defined as
ENUM('a','b','c')
, values
such as ''
, 'd'
, or
'ax'
are illegal and are rejected.
A SET
value must be the
empty string or a value consisting only of the values
listed in the column definition separated by commas. For a
column defined as
SET('a','b','c')
, values
such as 'd'
or
'a,b,c,d'
are illegal and are rejected.
Errors for invalid values can be suppressed in strict mode if
you use INSERT
IGNORE
or UPDATE IGNORE
. In this
case, a warning is generated rather than an error. For
ENUM
, the value is inserted as
the error member (0
). For
SET
, the value is inserted as
given except that any invalid substrings are deleted. For
example, 'a,x,b,y'
results in a value of
'a,b'
.
User Comments
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')
Add your own comment.