Diferencias entre campos ENUM y SET en MySQL

El tipo de campo ENUM y SET sirven para determinar los valores que puede tener un campo de una tabla. En ambos determinas la lista de valores que puede contener el campo.

La principal diferencia esta en que un campo de tipo ENUM siempre contendrá un sólo valor de la lista, en cambio en un campo de tipo SET el campo puede contener uno, varios o ningún valor de la lista. Pero hay más características que los diferencian, vamos a verlas.

El tipo de campo ENUM se define de la siguiente forma:
color ENUM('rojo', 'verde', 'azul') NOT NULL DEFAULT 'verde'
  • Sólo contiene un valor.
  • Se puede definir la lista de hasta 65535 valores distintos.
  • Si se permite el valor NULL, este será el valor por defecto, en caso contrario, y si no se define con DEFAULT, será el primer valor de la lista (en el ejemplo de arriba, si no defino el DEFAULT ‘verde’, por defecto sería ‘rojo’).
  • Cada valor de la lista es numerado con un índice (empieza en el 1), pudiéndose utilizar el índice en lugar del valor de la lista (en el ejemplo de arriba: 1=>’rojo’, 2=>’verde’ y 3=>’azul’).
  • En caso de introducir un valor no definido en la lista, el campo pasará a valer '', una cadena vacía, que tiene el índice cero. Y el índice de NULL es NULL.
  • Físicamente ocupa 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 define de la siguiente forma:
letras SET('a','b','c','d')
  • Contiene uno, varios o ningún valores
  • Se puede definir la lista de hasta 64 valores distintos.
  • Físicamente ocupa ocupa 1, 2, 3... u 8 bytes, según la longitud de la lista de valores. Cada valor de la lista representa un bit de la cadena de bits del campo marcandose los valores que contiene el campo, de manera que si todos los bits estan a 1, es que ese campo contiene todos los valores.
    • En el ejemplo:
      • Valores     bits
      • ‘a’     00000001
      • ‘b’     00000010
      • ‘c’     00000100
      • ‘d’     00001000
      • 'a','c' 00000101

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.