expecting example change cambia but mysql types boolean tinyint

mysql - example - Confusión BOOLEAN o TINYINT



mysql workbench change boolean to tinyint (5)

Estaba diseñando una base de datos para un sitio donde necesito usar un tipo de fecha booleana para almacenar solo 2 estados, verdadero o falso. Estoy usando MySQL.
Al diseñar la base de datos usando phpMyAdmin, encontré que tengo tanto el tipo de datos BOOLEAN como el tipo de datos TINYINT.
Revisé diferentes artículos, algunos dijeron que TINYINT es lo mismo que BOOLEAN, no hay diferencia. Algunos dicen que BOOLEAN se convierte en TINYINT en MySQL.

MI pregunta es, si ambos son iguales, ¿por qué existen dos? Debería haber solo uno de ellos.

Aquí está la referencia a los artículos que leí:
http://www.careerride.com/MySQL-BOOL-TINYINT-BIT.aspx
http://dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html




Las versiones más recientes de MySQL tienen el nuevo tipo de datos BIT en el que puede especificar el número de bits en el campo, por ejemplo, BIT(1) para usar como tipo Boolean , porque puede ser solo 0 o 1 .


MySQL no tiene tipo de datos booleanos internos. Utiliza el tipo de datos entero más pequeño - TINYINT.

El BOOLEAN y BOOL son equivalentes de TINYINT (1), porque son sinónimos.

Intenta crear esta tabla -

CREATE TABLE table1 ( column1 BOOLEAN DEFAULT NULL );

Luego ejecute SHOW CREATE TABLE, obtendrá esta salida -

CREATE TABLE `table1` ( `column1` tinyint(1) DEFAULT NULL )


Solo una nota para desarrolladores de PHP (me faltan los puntos de necesarios para publicar esto como un comentario) ... la conversión automática (y silenciosa) a TINYINT significa que php recupera un valor de una columna "BOOLEAN" como un "0" o "1", no el esperado (por mí) verdadero / falso.

Un desarrollador que está mirando el SQL utilizado para crear una tabla y ve algo así como: "some_boolean BOOLEAN NOT NULL DEFAULT FALSE" podría razonablemente esperar ver resultados verdaderos / falsos cuando se recupera una fila que contiene esa columna. En cambio (al menos en mi versión de PHP), el resultado será "0" o "1" (sí, una cadena "0" o una cadena "1", no una int 0/1, gracias php).

Es una liendre, pero lo suficiente como para provocar fallas en las pruebas unitarias.