example - Boolean vs tinyint(1) para valores booleanos en MySQL
tinyint mysql (6)
Estos tipos de datos son sinónimos.
¿Qué tipo de columna es mejor usar en una base de datos MySQL para valores booleanos? Yo uso boolean
pero mi colega usa tinyint(1)
.
Mi experiencia al usar Dapper para conectarme a MySQL es que sí importa . Cambié un bit que no admite nulos (1) a un tinyint nulo (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 cual resolvió el problema.
Si bien es cierto que bool
y tinyint(1)
son funcionalmente idénticos, bool
debería ser la opción preferida porque tiene el significado semántico de lo que estás tratando de hacer. Además, muchos ORM convertirán bool
en el tipo booleano nativo de su lenguaje de programación.
Voy a tomar un enfoque diferente aquí y sugerir que es tan importante para tus compañeros desarrolladores entender tu código como lo es para el compilador / base de datos. Usar boolean puede hacer lo mismo que usar tinyint, sin embargo tiene la ventaja de transmitir semánticamente cuál es tu intención, y eso vale la pena.
Si usa una minúscula, no es obvio que los únicos valores que debería ver son 0 y 1. Un booleano SIEMPRE es verdadero o falso.
utilizar enum es el más fácil y más rápido
No recomendaré enum ni tinyint (1) ya que el bit (1) solo necesita 1 bit para almacenar el valor booleano mientras que tinyint (1) necesita 8 bits.
árbitro
boolean
no es un tipo de datos distinto en MySQL; es solo un sinónimo de tinyint
. dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html .
Personalmente, sugiero usar tinyint como preferencia, porque boolean no hace lo que crees que hace desde el nombre, por lo que crea un código potencialmente engañoso. Pero a nivel práctico, realmente no importa; ambos hacen lo mismo, por lo que no estás ganando ni perdiendo nada al usar cualquiera de los dos.