Del manual de MySQL, dice:
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:
Creé una columna BOOLEAN con 0
el valor predeterminado. Luego actualizo el valor a 2
. Lógicamente, yo esperaría MySQL para aceptar cualquiera 0
o 1
ya que es un valor lógico. Sin embargo, MySQL no emitió un error ni me impidió realizar la actualización.
Si BOOLEAN funciona exactamente igual que TINYINT (1), ¿hay alguna diferencia si uso TINYINT (1) o BOOLEAN?
BIT
es realmente un campo de bits que contiene de uno a sesenta y cuatro bits de forma compacta.Si está trabajando con otras personas (o desea recordarse a sí mismo), puede usar el tipo de datos
BOOLEAN
para sugerir que los datos solo tienen un valor de 1 o 0.fuente
Me parece que de hecho hay una diferencia.
En una tabla que estoy usando, tengo una columna definida como tinyint con un índice en la columna. Cuando invoco la siguiente consulta "explicar select * de la tabla donde la columna es verdadera", indica que leerá todas las filas de la tabla (las columnas "possible_keys" y "ref" son nulas a pesar de que la columna "clave" muestra el índice).
Cambiando la consulta a "explicar select * de la tabla donde columna = 1" el índice se activa correctamente, con las "claves posibles" y las columnas "ref" asignando valores y "filas" configuradas en un número mucho menor.
También intenté reemplazar el "verdadero" con "falso" y el 1 con un 0 y obtuve resultados comparables.
Dando un paso más, cambié de un tinyint a un int y no hizo ninguna diferencia.
fuente