¿En qué casos usarías cuál? ¿Hay mucha diferencia? ¿Cuál utilizo normalmente por los motores de persistencia para almacenar valores booleanos?
106
Un TINYINT es un valor entero de 8 bits, un campo BIT puede almacenar entre 1 bit, BIT (1) y 64 bits, BIT (64). Para valores booleanos, BIT (1) es bastante común.
De la descripción general de los tipos numéricos ;
BIT [(M)]
TINYINT [(M)] [UNSIGNED] [ZEROFILL]
Además, considere esto;
BOOL, BOOLEAN
fuente
boolean
tomará un byte aunque en realidad sea solo un poco, por lo que un BIT (1) es mejor después de v5.0.3?BOOL
/BOOLEAN
sean alias de enTINYINT(1)
lugar deBIT
. Seguro, todos acaban ocupando un byte completo, pero semánticamenteBIT
sería mucho más apropiado.Todas estas discusiones teóricas son geniales, pero en realidad, al menos si está utilizando MySQL y también para SQLServer, es mejor quedarse con datos no binarios para sus booleanos por la sencilla razón de que es más fácil trabajar con ellos cuando están generando datos, consultando, etc. Es especialmente importante si está tratando de lograr la interoperabilidad entre MySQL y SQLServer (es decir, sincroniza datos entre los dos), porque el manejo del tipo de datos BIT es diferente en los dos. Entonces, en la práctica, tendrá muchas menos molestias si se queda con un tipo de datos numérico. Recomendaría que MySQL se quede con BOOL o BOOLEAN, que se almacena como TINYINT (1). Incluso la forma en que MySQL Workbench y MySQL Administrator muestran el tipo de datos BIT no es agradable (es un pequeño símbolo para datos binarios).
fuente
BIT solo debe permitir 0 y 1 (y NULL, si el campo no está definido como NOT NULL). TINYINT (1) permite cualquier valor que se pueda almacenar en un solo byte, -128..127 o 0..255 dependiendo de si está sin firmar o no (el 1 muestra que solo tiene la intención de usar un solo dígito, pero no no le impide almacenar un valor mayor).
Para versiones anteriores a la 5.0.3, BIT se interpreta como TINYINT (1), por lo que no hay diferencia.
BIT tiene una semántica "esto es un booleano", y algunas aplicaciones considerarán TINYINT (1) de la misma manera (debido a la forma en que MySQL solía tratarlo), por lo que las aplicaciones pueden formatear la columna como una casilla de verificación si marcan el tipo y decidir un formato basado en eso.
fuente
Puede que esté mal pero:
Tinyint es un número entero entre 0 y 255
bit es 1 o 0
Por lo tanto, para mí, bit es la elección de los booleanos.
fuente
Por mi experiencia, les digo que BIT tiene problemas con los tipos de sistemas operativos Linux (Ubuntu por ejemplo). Desarrollé mi base de datos en Windows y después de implementar todo en Linux, tuve problemas con las consultas que insertaban o seleccionaban de tablas que tenían TIPO DE DATOS DE BIT.
Bit no es seguro por ahora. Cambié a tinyint (1) y funcionó perfectamente. Quiero decir que solo necesitas un valor para diferenciar si es 1 o 0 y tinyint (1) está bien para eso
fuente