Diferencias entre ENUM y SET en MySQL

In: mysql

24 sep 2009

MySQL AvanzadoExistes dos tipos de campo en MySQL que siempre los he visto iguales. He investigado un poco en sus diferencias y lo que voy a comentar sirve tanto para MySQL 5.1 como MySQL 5.4.

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.

Hay más características de estos dos campos de , que les hace diferenciarse y es necesario conocerlas para decidir cual es más apropiado para nuestro diseño de la base de datos.

El tipo de campo ENUM se caracteriza por:

CREATE TABLE sizes (
	size ENUM('small', 'medium', 'large') NOT NULL DEFAULT 'medium'
);
  • Sólo contiene un valor
  • 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 ‘medium’, por defecto sería ‘small’)
  • 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=>’small’, 2=>’medium’ y 3=>’large’)
  • 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 tipo de campo SET se caracteriza por:

CREATE TABLE letters (
	letter SET('a', 'b', 'c', 'd')
);
  • 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)

Conociendo más a fondo los tipos de campos, y sabiendo sus posibilidades, ahora es fácil decidirse y justicarse.

Entradas relacionadas:

  1. Diferencias entre mysql, mysqli y PDO en PHP
  2. Trabajando con el tipo de campo BIT de MySQL en PHP
  3. Diferencias entre URL, URI y URN
  4. La selectividad de los índices en MySQL
  5. Función GROUP_CONCAT de MySQL

1 Comentario en Diferencias entre ENUM y SET en MySQL

Enrique

10 julio 2010 a las 19:17

Muy buena guia. Estaba buscando esto, Gracias !

Formulario de Comentario

Página 1 de 0

Sobre este blog

Este blog informático pretende ser un blog de notas o portafolio de información variada: trozos de código, descubrimientos, notas sueltas, ... Para tenerla a mano, y ser compartida.