tipo - ¿Cuál es la diferencia entre BIT y TINYINT en MySQL?
tipos de datos en mysql workbench (6)
¿En qué casos usarías cuál? ¿Hay mucha diferencia? ¿Qué típicamente utilicé por motores de persistencia para almacenar booleanos?
BIT solo debería permitir 0 y 1 (y NULL, si el campo no está definido como NOT NULL). TINYINT (1) permite cualquier valor que pueda almacenarse en un solo byte, -128..127 o 0..255 dependiendo de si está sin firmar (el 1 muestra que tiene la intención de usar solo un dígito, pero lo hace no le impide almacenar un valor mayor).
Para versiones anteriores a 5.0.3, BIT se interpreta como TINYINT (1), por lo que no hay diferencia allí.
BIT tiene una semántica "esto es booleana", y algunas aplicaciones considerarán TINYINT (1) de la misma manera (debido a la forma en que MySQL lo usó para tratarlo), de modo que las aplicaciones pueden formatear la columna como una casilla de verificación si revisan el tipo y decidir sobre un formato basado en eso.
Desde mi experiencia, te digo que BIT tiene problemas con los tipos de sistema operativo Linux (Ubuntu por ejemplo). Desarrollé mi db en Windows y después de implementar todo en Linux, tuve problemas con las consultas que insertaba o seleccionaba de las tablas que tenían BIT DATA TYPE.
El 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
Podría estar equivocado, pero:
Tinyint es un número entero entre 0 y 255
el bit es 1 o 0
Por lo tanto, para mí, el bit es la elección de booleanos
Todas estas discusiones teóricas son geniales, pero en realidad, al menos si está utilizando MySQL y realmente 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 usted. está emitiendo datos, consultas, etc. Es especialmente importante si está tratando de lograr la interoperabilidad entre MySQL y SQLServer (es decir, sincroniza los datos entre los dos), porque el manejo del tipo de datos BIT es diferente en los dos. ASÍ QUE, en la práctica, tendrás muchas menos complicaciones si te quedas con un tipo de datos numérico. Yo 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). Así que sea práctico y ahórrese las molestias (y desafortunadamente estoy hablando por experiencia).
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.
texto alternativo http://dev.mysql.com/common/logos/logo_mysql_sun_a.gif
Desde la vista general de los tipos numéricos ;
BIT [(M)]
Un tipo de campo de bit M indica el número de bits por valor, de 1 a 64. El valor predeterminado es 1 si se omite M.
Este tipo de datos se agregó en MySQL 5.0.3 para MyISAM y se extendió en 5.0.5 a MEMORY, InnoDB, BDB y NDBCLUSTER. Antes de 5.0.3, BIT es un sinónimo de TINYINT (1).
TINYINT [(M)] [UNSIGNED] [ZEROFILL]
Un entero muy pequeño. El rango con signo es -128 a 127. El rango sin signo es de 0 a 255.
Además considere esto;
BOOL, BOOLEAN
Estos tipos son sinónimos de TINYINT (1). Un valor de cero se considera falso. Los valores distintos de cero se consideran verdaderos.