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.