¿Cuál es el beneficio de usar BOOLEAN sobre TINYINT (1)?

16

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 0el valor predeterminado. Luego actualizo el valor a 2. Lógicamente, yo esperaría MySQL para aceptar cualquiera 0o 1ya 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?

Desbordamiento de preguntas
fuente

Respuestas:

11

Esos dos son realmente sinónimos, por lo que puede usarlos indistintamente. No verás ninguna diferencia entre ellos.

Si desea permitir solo 0 y 1, aún puede usar el bittipo.

dezso
fuente
1
@QuestionOverflow Tenga en cuenta que BITes realmente un campo de bits que contiene de uno a sesenta y cuatro bits de forma compacta.
David Harkness
2

Si está trabajando con otras personas (o desea recordarse a sí mismo), puede usar el tipo de datos BOOLEANpara sugerir que los datos solo tienen un valor de 1 o 0.

Cato Minor
fuente
0

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.

usuario77843
fuente