Saltar al contenido

¿Enum o Bool en mysql?

Solución:

BOOLEAN es un alias de TINYINT (1) y se almacena como un byte de datos.
ENUM (‘y’, ‘n’) también se almacena como 1 byte de datos.

Entonces, desde el punto de vista del tamaño de almacenamiento, ninguno es mejor.
Sin embargo, puede almacenar 9 en un campo BOOLEAN y lo aceptará. Entonces, si desea forzar solo dos estados, elija ENUM.

Aquí está el problema de almacenar valores booleanos como una enumeración:

SELECT count(*) FROM people WHERE is_active = true; # => Devuelve 0 porque verdadero! = ‘Verdadero’

Lo cual es engañoso porque:

SELECT count(*) FROM people WHERE is_active="true"; # => Devuelve 10

Si está escribiendo todas sus propias consultas SQL, entonces sabrá que no debe pasar una expresión a su consulta, pero si está utilizando un ORM, tendrá problemas, ya que un ORM normalmente convertirá la expresión a algo que la base de datos que está consultando pueda entender (‘t “https://foroayuda.es/” f’ para SQLite; 0/1 para MySQL, etc.)

En resumen, si bien uno puede no ser más rápido que el otro a nivel de bytes, los valores booleanos deben almacenarse como expresiones para poder compararlos con otras expresiones.

Al menos, así lo veo yo.

TINYINT(1) – parece un booleano, así que conviértalo en uno.

Nunca compare internamente con cosas como y cuando un booleano (0/1) está disponible.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *