Respuestas:
Estos tipos de datos son sinónimos.
Voy a adoptar un enfoque diferente aquí y sugerir que es tan importante para sus colegas desarrolladores comprender su código como lo es para el compilador / base de datos. Usar booleano puede hacer lo mismo que usar tinyint, sin embargo, tiene la ventaja de transmitir semánticamente cuál es su intención, y eso vale algo.
Si usa una minúscula, no es obvio que los únicos valores que debería ver sean 0 y 1. Un booleano SIEMPRE es verdadero o falso.
boolean
no es un tipo de datos distinto en MySQL; es solo un sinónimo de tinyint
. Vea esta página en el manual de MySQL .
Personalmente, sugeriría usar tinyint como preferencia, porque boolean no hace lo que crees que hace del nombre, por lo que genera un código potencialmente engañoso. Pero a nivel práctico, realmente no importa: ambos hacen lo mismo, por lo que no está ganando ni perdiendo nada al usar ninguno.
usar enum es el más fácil y rápido
No recomendaré enum o tinyint (1) ya que el bit (1) necesita solo 1 bit para almacenar el valor booleano, mientras que tinyint (1) necesita 8 bits.
árbitro
BIT(M) - approximately (M+7)/8 bytes
ver: dev.mysql.com/doc/refman/8.0/en/storage-requirements.html
Si bien es cierto que bool
y tinyint(1)
son funcionalmente idénticos, bool
debería ser la opción preferida, ya que lleva el significado semántico de lo que estás tratando de hacer. Además, muchos ORM se convertirán bool
en el tipo booleano nativo de su lenguaje de programación.
Mi experiencia al usar Dapper para conectarse a MySQL es que sí importa . Cambié un bit no anulable (1) a un tinyint anulable (1) usando el siguiente script:
ALTER TABLE TableName MODIFY Setting BOOLEAN null;
Entonces Dapper comenzó a lanzar Excepciones. Traté de ver la diferencia antes y después del guión. Y noté que el bit (1) había cambiado a tinyint (1).
Entonces corrí:
ALTER TABLE TableName CHANGE COLUMN Setting Setting BIT(1) NULL DEFAULT NULL;
Lo que resolvió el problema.
boolean
comotinyint(1)
. Así que usted puede utilizarboolean
,true
yfalse
MySQL y los trata comotinyint(1)
,1
y0
.