Las columnas ENUM
y SET
proporcionan una manera eficiente de definir columnas que
contienen un conjunto dado de valores. Sin embargo, antes de
MySQL 5.0.2, ENUM
y SET
no son restricciones reales. Esto es por la misma razón que
NOT NULL
tampoco lo es. Consulte
Sección 1.7.6.2, “Restricciones (constraints) sobre datos inválidos”.
Las columnas de tipo ENUM
siempre tienen un
valor por defecto. Si no especifica un valor por defecto,
entonces será NULL
para las columnas que
permitan valores NULL
, si no, se utiliza el
primer valor de la enumeración como valor por defecto.
Si inserta un valor incorrecto en una columna
ENUM
o si fuerza insertar un valor en una
columna ENUM
con IGNORE
,
se inicializa al valor reservado para enumeraciones
0
, el cual se muestra como una cadena
vacía en un contexto de cadenas de caracteres. Consulte
Sección 11.4.4, “El tipo de columna ENUM
”.
Si insertar un valor incorrecto en una columna
SET
, se ignora el valor incorrecto. Por
ejemplo, si la columna puede contener los valores
'a'
, 'b'
, y
'c'
, un intento de insertar
'a,x,b,y'
resulta en un valor de
'a,b'
. Consulte Sección 11.4.5, “El tipo SET
”.
En MySQL 5.0.2, puede configurar el servidor para que use el
modo estricto de SQL. Consulte
Sección 5.3.2, “El modo SQL del servidor”. Cuando el modo estricto
está activado, la definición de columnas
ENUM
o SET
no actúa
como una restricción en valores insertados en la columna. Los
valores que no satisfacen estas condiciones provocan un error:
Un valor ENUM
debe elegirse entre los
listados en la definición de la columna, o el equivalente
numérico interno. El valor no puede ser un valor de error
(esto es 0 o la cadena vacía). Para una columna definida
como ENUM('a','b','c')
, valores tales
como ""
, 'd'
, y
'ax'
son ilegales y rehusados.
Un valor SET
debe ser una cadena vacía
o un valor consistente en uno o más valores listados en
la definición de la columna separados por comas. Para una
columna definida como SET('a','b','c')
,
valores tales como 'd'
, y
'a,b,c,d'
serían ilegales y, por lo
tanto, rehusados.
Se pueden suprimir los errores derivados de valores inválidos
en modo estricto usando INSERT IGNORE
o
UPDATE IGNORE
. En ese caso, se genera una
advertencia en lugar de un error. Para tipos
ENUM
, el valor se inserta como un miembro
erróneo (0
). Para tipo
SET
, el valor se inserta igual excepto que
se borra cualquier subcadena inválida. Por ejemplo,
'a,x,b,y'
se convertiría en
'a,b'
, como se ha descrito.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.