BOOLEAN或TINYINT混淆

我正在devise一个网站的数据库,我需要使用布尔datetype只存储2个状态,true或false。 我正在使用MySQL。
当使用phpMyAdmindevise数据库时,我发现我有BOOLEAN数据types和TINYINT数据types。
我经历了不同的文章,有人说TINYINT和BOOLEAN一样,没什么区别。 有人说BOOLEAN在MySQL中被转换成TINYINT。

我的问题是,如果两者都是相同的,为什么还有两个? 应该只有其中一个。

以下是对我阅读的文章的参考:
http://www.careerride.com/MySQL-BOOL-TINYINT-BIT.aspx
http://dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html

MySQL没有内部布尔数据types。 它使用最小的整型数据types – TINYINT。

BOOLEAN和BOOL是TINYINT(1)的等价物,因为它们是同义词。

尝试创build这个表 –

CREATE TABLE table1 ( column1 BOOLEAN DEFAULT NULL ); 

然后运行SHOW CREATE TABLE,你会得到这个输出 –

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

只是一个注意PHP开发人员(我缺乏必要的stackoverflow点发表这个评论)…自动转换(和沉默)到TINYINT意味着PHP从“BOOLEAN”列检索值为“0”或“1”,而不是预期的(靠我)真/假。

正在查看用于创build表的SQL的开发人员可能会看到如下所示的结果:“some_boolean BOOLEAN NOT NULL DEFAULT FALSE”可能合理地期望在检索包含该列的行时看到真/假结果。 相反(至less在我的版本的PHP),结果将是“0”或“1”(是的,一个string“0”或string“1”,不是一个int 0/1,谢谢你的PHP)。

这是一个不足之处,但足以导致unit testing失败。

最新的MySQL版本有新的BIT数据types,您可以在其中指定字段中的位数,例如BIT(1)用作Booleantypes,因为它可以只有01

从MySql 5.1版本参考

 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