Actualmente en MySQL existen dos tipos de campo que solemos ver iguales y no encontramos diferencia alguna en este post veremos cuales son sus diferencias.
Tanto ENUM como SET, sirven para determinar los valores que puede tener un campo de una tabla, es decir, puedes determinar que en un campo solamente pueda contener valores de una lista definida por ti. La principal diferencia es que un campo del tipo ENUM siempre contiene sólo un valor de la lista; y un campo del tipo SET puede contener ninguno, uno o varios valores de la lista.
La principal diferencia esta en que un campo de tipo ENUM solo puede contener un sólo valor de la lista, en cambio el campo de tipo SETpuede contener uno, varios o ningúno de los valores de la lista. Pero hay más diferencias aun, así que vamos a verlas.
El campo ENUM se caracteriza por:
CREATE TABLE colores (
color ENUM('azul', 'blanco', 'rojo') NOT NULL DEFAULT 'rojo';
);
- Sólo contiene un valores.
- Se puede definir la lista de hasta 65535 valores distintos.
- Si se permite NULL, este será el valor por defecto; sinó, y si no se define con DEFAULT, será el primer valor de la lista (en el ejemplo de arriba, si no defino el DEFAULT ‘azul’, por defecto sería ‘azul’).
- Cada valor de la lista es numerado con un índice (empieza desde el 1), pudiendo usar el índice en vez del valor de la lista (en el ejemplo de arriba: 1=>’azul’, 2=>’blanco’ y 3=>’rojo’).
- En caso de introducir un valor no perteciente a la lista, el campo pasará a valer ”, una cadena vacía, que tiene el índice zero
- El índice de NULL es NULL,
- Para retornar el índice de un campo del tipo ENUM, podemos sumar zero al campo (SELECT size+0 FROM …)
- De almacenamiento físico, ocupará 1 byte si hay 255 o menos valores en la lista, o 2 bytes si hay 256 o más valores.
El campo SET se caracteriza por:
CREATE TABLE colores (
color SET('azul', 'blanco', 'rojo', 'amarillo');
);
- Contiene zero, uno o varios valores.
- Se puede definir la lista de hasta 64 valores distintos.
- Los valores no pueden contener comas, ya que los valores asignados son separados por comas.
- Cada valor de la lista representa un bit de la cadena de bits del campo.
- El valor decimal del campo determina los bits, marcando los valores que contiene el campo,de manera que si todos los bits estan a 1, es que ese campo contiene todos los valores (ejemplo: si el valor decimal es 7, en binario sería 0111, y eso quiere decir que el campo contiene los valore ‘a’, ‘b’ y ‘c’).
SET DECIMAL BYTES 'A' 1 0001 'B' 2 0010 'C' 4 0100 'D' 8 1000
- De almacenamiento físico, ocupará 1, 2, 3, 4, o 8 bytes, según la longitud de la lista de valores (si N es el número de valores, la formula es (N+7)/8 bytes).
Ahora sabemos las diferencias más importantes tales como que ENUM soporta más elementos que SET yque SET no soporta el uso de ‘,'(Commas) entre sus elementos.
Conociendo más a fondo los tipos de campos, y sabiendo sus posibilidades, ahora es fácil decidirse y justicarse.