Confusion BOOLEAN ou TINYINT

Je concevais une firebase database pour un site où je devais utiliser un type de données booléen pour stocker uniquement 2 états, true ou false. J’utilise MySQL.
Lors de la conception de la firebase database à l’aide de phpMyAdmin, j’ai constaté que j’avais à la fois le type de données BOOLEAN et le type de données TINYINT.
J’ai parcouru différents articles, certains ont dit que TINYINT est identique à BOOLEAN, pas de différence. Certains disent que BOOLEAN est converti en TINYINT en MySQL.

Ma question est la suivante: si les deux sont identiques, pourquoi existe-t-il deux? Il ne devrait y en avoir qu’un.

Voici la référence aux articles que je lis:
http://www.careerride.com/MySQL-BOOL-TINYINT-BIT.aspx
http://dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html

MySQL n’a pas de type de données booléen interne. Il utilise le plus petit type de données entier – TINYINT.

BOOLEAN et BOOL sont des équivalents de TINYINT (1), car ils sont synonymes.

Essayez de créer cette table –

CREATE TABLE table1 ( column1 BOOLEAN DEFAULT NULL ); 

Ensuite, exécutez SHOW CREATE TABLE, vous obtiendrez cette sortie –

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

Juste une note pour les développeurs PHP (je n’ai pas les points stackoverflow nécessaires pour poster ceci en tant que commentaire) … la conversion automatique (et silencieuse) en TINYINT signifie que php récupère une valeur d’une colonne “BOOLEAN” “1”, pas le prévu (par moi) vrai / faux.

Un développeur qui examine le SQL utilisé pour créer une table et voit quelque chose comme: “some_boolean BOOLEAN NOT NULL DEFAULT FALSE” peut raisonnablement s’attendre à voir des résultats vrais / faux lorsqu’une ligne contenant cette colonne est extraite. Au lieu de cela (au moins dans ma version de PHP), le résultat sera “0” ou “1” (oui, une chaîne “0” ou une chaîne “1”, pas un int 0/1, merci php).

C’est un nit, mais assez pour provoquer l’échec des tests unitaires.

Les nouvelles versions de MySQL ont le nouveau type de données BIT dans lequel vous pouvez spécifier le nombre de bits dans le champ, par exemple BIT(1) à utiliser comme type Boolean , car il ne peut être que 0 ou 1 .

À partir de MySql version 5.1 référence

 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

L’aperçu du type numérique pour les états MySQL: BOOL, BOOLEAN: Ces types sont des synonymes pour TINYINT (1). Une valeur de zéro est considérée comme fausse. Les valeurs non nulles sont considérées comme vraies.

Voir ici: https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html