Un ENUM
es un objeto de cadenas de caracteres
con un valor elegido de una lista de valores permitidos que se
enumeran explícitamente en la especificación de columna en
tiempo de creación de la tabla.
El valor puede ser la cadena vacía (''
) o
NULL
bajo ciertas circunstancias:
Si inserta un valor inválido en un ENUM
(esto es, una cadena de caracteres no presente en la lista
de valores permitidos), la cadena vacía se inserta en lugar
de un valor especial de error. Esta cadena puede
distinguirse de una cadena vacía “normal” por
el hecho que esta cadena tiene un valor numérico 0. Más
información posteriormente.
Si se declara una columna ENUM
para
permitir NULL
, el valor
NULL
es un valor legal para la columna, y
el valor por defecto es NULL
. Si una
columna ENUM
se declara NOT
NULL
, su valor por defecto es el primer elemento
de la lista de valores permitidos.
Cada valor de la enumeración tiene un índice:
Los valores de la lista de elementos permitidos en la especificación de la columna se numeran empezando por 1.
El valor de índice de la cadena errónea es 0. Esto
significa que puede usar el siguiente comando
SELECT
para encontrar registros con el
valor inválido ENUM
asignado:
mysql> SELECT * FROMtbl_name
WHEREenum_col
=0;
El índice del valor NULL
es
NULL
.
Por ejemplo, una columna especificada como ENUM('one',
'two', 'three')
puede tener cualquiera de los valores
mostrados aquí. El índice de cada valor se muestra:
Valor | Índice |
NULL |
NULL |
'' |
0 |
'one' |
1 |
'two' |
2 |
'three' |
3 |
Una enumeración puede tener un máximo de 65,535 elementos.
Los espacios finales se borran automáticamente para valores
ENUM
miembros cuando se crea la tabla.
Cuando se reciben, los valores almacenados en una columna
ENUM
se muestran usando el formato de
mayúsculas/minúsculas usado en la definición de la columna.
En MySQL 4.1.1, las columnas ENUM
pueden
recibir un conjunto de caracteres y colación. Para colaciones
binarias o sensibles a mayúsculas/minúsculas, el formato se
tiene en cuenta al asignar valores a la columna.
Si recibe un valor ENUM
en contexto
numérico, se retorna el índice del valor. Por ejemplo, puede
recibir valores numéricos de una columna
ENUM
así:
mysql> SELECTenum_col
+0 FROMtbl_name
;
Si almacena un número en una columna ENUM
,
el número se trata como índice, y el valor almacenado es el
miembro de la enumeración con ese índice. (Sin embargo, esto
no funciona con LOAD DATA
, que trata toda la
entrada como cadenas de caracteres.) No es recomendable definir
una columna ENUM
con valores de enumeración
que parezcan números, ya que esto puede causar confusión. Por
ejemplo, la siguiente columna tiene miembros de enumeración con
valores de '0'
, '1'
, y
'2'
, pero valores de índice
1
, 2
, y
3
:
numbers ENUM('0','1','2')
Los valores ENUM
se ordenan según el order
en que se enumeran los mienbros en la especificación de la
columna. (En otras palabras, los valores ENUM
se ordenan según sus números de índice.) Por ejemplo,
'a'
se ordena antes que
'b'
para ENUM('a', 'b')
,
pero 'b'
se ordena antes de
'a'
para ENUM('b', 'a')
.
La cadena vacía se ordena antes de las cadenas no vacías, y
los valores NULL
se ordenan antes de todos
los otros valores de la enumeración. Para evitar resultados
inesperados, especifique la lista ENUM
en
orden alfabético. También puede usar GROUP BY
CAST(col AS VARCHAR)
o GROUP BY
CONCAT(col)
para asegurarse que la columna se ordena
léxicamente en lugar de por número de índice.
Si quiere determinar todos los valores posibles para una columna
ENUM
, use SHOW COLUMNS FROM
y parsee la
definición de tbl_name
LIKE
enum_col
ENUM
en la segunda columna de
la salida.
É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.