Confusión BOOLEANA o TINYINT


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

MI pregunta es, si ambos son iguales ¿por qué existen dos? Alli debería ser sólo uno de ellos.

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

Author: S.L. Barth, 2012-06-23

5 answers

MySQL no tiene un tipo de datos booleano interno. Utiliza el tipo de datos entero más pequeño - TINYINT.

El BOOLEANO 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
)
 106
Author: Devart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-13 19:21:27

Solo una nota para los desarrolladores de php (me faltan los puntos stackoverflow 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 "BOOLEANA" 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 como: "some_boolean BOOLEAN NOT NULL DEFAULT FALSE," podría razonablemente esperar ver resultados true / false cuando una fila que contenga se recupera la columna. En su lugar (al menos en mi versión de PHP), el resultado será "0" o "1" (sí, una cadena "0" o cadena "1", no un int 0/1, gracias php).

Es un nit, pero suficiente para causar que las pruebas unitarias fallen.

 27
Author: Tom Stambaugh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-04 21:29:13

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 solo puede ser 0 o 1.

 22
Author: PSyLoCKe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-25 13:33:42

A partir de la versión de MySQL 5.1 referencia

BIT(M) =  approximately (M+7)/8 bytes, 
BIT(1) =  (1+7)/8 = 1 bytes (8 bits)

=========================================================================

TINYINT(1) take 8 bits.

Https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html#data-types-storage-reqs-numeric

 7
Author: fortune,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-16 09:08:29

Descripción general del tipo numérico para los estados MySQL: BOOL, BOOLEANO: Estos tipos son sinónimos de TINYINT(1). Un valor de cero se considera falso. Los valores distintos de cero se consideran verdaderos.

Ver aquí: https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html

 0
Author: Patrik Rikama-Hinnenberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-11 11:18:01