Estaba diseñando una base de datos para un sitio donde necesito usar un tipo de fecha 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 BOOLEAN como el tipo de datos TINYINT.
Revisé diferentes artículos, algunos decían 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
BIT(1)
oBIT(17)
inclusoBIT(64)
Solo una nota para los desarrolladores de php (me faltan los puntos de 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 "BOOLEAN" como un "0" o "1", no el esperado (por mí) verdadero / falso.
Un desarrollador que está mirando el SQL usado para crear una tabla y ve algo como: "algún_booleano BOOLEANO NO NULL DEFAULT FALSE", podría esperar razonablemente ver resultados de verdadero / falso 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 un int 0/1, gracias php).
Es una liendre, pero lo suficiente como para hacer fallar las pruebas unitarias.
fuente
Las versiones más recientes de MySQL tienen el nuevo
BIT
tipo de datos en el que puede especificar el número de bits en el campo, por ejemplo,BIT(1)
para usar comoBoolean
tipo, porque puede ser solo0
o1
.fuente
A partir de la referencia de la versión MySql 5.1
================================================ =======================
https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html#data-types-storage-reqs-numeric
fuente
La descripción general de tipos numéricos para los estados de MySQL: 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.
Vea aquí: https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html
fuente