Sintaxis

ENUM('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]

Descripción

Una enumeración. UN string objeto que puede tener un solo valor, elegido de la lista de valores ‘valor1’, ‘valor2’, …, NULL o el valor de error especial ”. En teoría, un ENUM la columna puede tener un máximo de 65.535 valores distintos; en la práctica, el máximo real depende de muchos factores. ENUM los valores se representan internamente como enteros.

Los espacios finales se eliminan automáticamente de los valores ENUM en la creación de la tabla.

Los ENUM requieren relativamente poco espacio de almacenamiento en comparación con las cadenas, uno o dos bytes, según la cantidad de valores de enumeración.

NULL y valores vacíos

Un ENUM también puede contener valores NULL y vacíos. Si la columna ENUM se declara para permitir valores NULL, NULL se convierte en un valor válido, así como en el valor predeterminado (ver más abajo). Si el modo SQL estricto no está habilitado y se inserta un valor no válido en un ENUM, aparecerá un espacio vacío especial. string, con un valor de índice de cero (consulte Índice numérico, a continuación), se inserta con una advertencia. Esto puede ser confuso, porque el vacío string también es un valor posible, y la única diferencia es que en este caso su índice no es 0. La inserción fallará con un error si el modo estricto está activo.

si un DEFAULT falta la cláusula, el valor predeterminado será:

  • NULL es la columna es anulable;
  • de lo contrario, el primer valor de la enumeración.

índice numérico

Los valores ENUM se indexan numéricamente en el orden en que se definen, y la clasificación se realizará en este orden numérico. Sugerimos no usar ENUM para almacenar números, ya que hay poco o ningún beneficio de espacio de almacenamiento, y es fácil confundir el número entero de la enumeración con el valor numérico de la enumeración al omitir las comillas.

Un ENUM definido como ENUM(‘manzana’,’naranja’,’pera’) tendría los siguientes valores de índice:

Índice Valor
NULO NULO
0
1 ‘manzana’
2 ‘naranja’
3 ‘pera’

Ejemplos

CREATE TABLE fruits (
  id INT NOT NULL auto_increment PRIMARY KEY,
  fruit ENUM('apple','orange','pear'),
  bushels INT);

DESCRIBE fruits;
+---------+-------------------------------+------+-----+---------+----------------+
| Field   | Type                          | Null | Key | Default | Extra          |
+---------+-------------------------------+------+-----+---------+----------------+
| id      | int(11)                       | NO   | PRI | NULL    | auto_increment |
| fruit   | enum('apple','orange','pear') | YES  |     | NULL    |                |
| bushels | int(11)                       | YES  |     | NULL    |                |
+---------+-------------------------------+------+-----+---------+----------------+

INSERT INTO fruits
    (fruit,bushels) VALUES
    ('pear',20),
    ('apple',100),
    ('orange',25);

INSERT INTO fruits
    (fruit,bushels) VALUES
    ('avocado',10);
ERROR 1265 (01000): Data truncated for column 'fruit' at row 1

SELECT * FROM fruits;
+----+--------+---------+
| id | fruit  | bushels |
+----+--------+---------+
|  1 | pear   |      20 |
|  2 | apple  |     100 |
|  3 | orange |      25 |
+----+--------+---------+

Selección por índice numérico:

SELECT * FROM fruits WHERE fruit=2;
+----+--------+---------+
| id | fruit  | bushels |
+----+--------+---------+
|  3 | orange |      25 |
+----+--------+---------+

La clasificación es de acuerdo con el valor del índice:

CREATE TABLE enums (a ENUM('2','1'));

INSERT INTO enums VALUES ('1'),('2');

SELECT * FROM enums ORDER BY a ASC;
+------+
| a    |
+------+
| 2    |
| 1    |
+------+

Es fácil confundirse entre devolver el entero enum con el valor almacenado, por lo que no sugerimos usar ENUM para almacenar números. El primer ejemplo devuelve el primer campo indexado (‘2’ tiene un valor de índice de 1, como se define primero), mientras que el segundo ejemplo devuelve el string valor ‘1’.

SELECT * FROM enums WHERE a=1;
+------+
| a    |
+------+
| 2    |
+------+

SELECT * FROM enums WHERE a='1';
+------+
| a    |
+------+
| 1    |
+------+

Ver también

  • Requisitos de almacenamiento de tipos de datos

El contenido reproducido en este sitio es propiedad de sus respectivos dueños, y MariaDB no revisa este contenido por adelantado. Los puntos de vista, la información y las opiniones expresadas por este contenido no representan necesariamente las de MariaDB o cualquier otra parte.