因为MySQL似乎没有任何“布尔”数据类型,你'滥用'哪种数据类型存储真/假的信息在MySQL?

特别是在编写和读取PHP脚本的上下文中。

随着时间的推移,我使用并看到了几种方法:

Tinyint, varchar字段包含0/1, Varchar字段包含字符串'0'/'1'或'true'/'false' 最后枚举包含“true”/“false”两个选项的字段。

以上这些似乎都不是最佳选择。我倾向于选择tinyint 0/1变体,因为PHP中的自动类型转换相当简单地为我提供布尔值。

那么使用哪种数据类型呢?是否有我忽略的布尔值的类型设计?你认为使用一种或另一种类型有什么优点或缺点吗?


当前回答

参考此链接 Mysql中的布尔数据类型,根据应用程序的使用情况,如果只存储0或1,比特(1)是更好的选择。

其他回答

在阅读了这里的答案后,我决定使用比特(1),是的,它在空间/时间上更好,但一段时间后我改变了主意,我再也不会使用它了。当使用准备好的语句、库等(php)时,它使我的开发变得非常复杂。

从那以后,我一直使用tinyint(1),似乎还不错。

如果使用BOOLEAN类型,则别名为TINYINT(1)。如果你想使用标准化的SQL并且不介意字段可能包含一个超出范围的值(基本上任何不是0的都将是“true”),这是最好的。

ENUM('False', 'True')将允许您在SQL中使用字符串,MySQL将根据指定ENUM的顺序将字段内部存储为'False'=0和'True'=1的整数。

在MySQL 5+中,您可以使用BIT(1)字段来表示1位数值类型。我不认为这实际上减少了存储空间,但再次允许您将可能的值限制为1或0。

以上所有方法使用的存储空间大致相同,因此最好选择最容易使用的方法。

我厌倦了试图得到零,null,和“准确地循环PHP, MySql和POST值,所以我只是使用'是'和'No'。

这是完美无缺的工作,不需要特别的处理,不明显,容易做到。

你可以使用BOOL, BOOLEAN数据类型来存储布尔值。

这些类型是TINYINT(1)的同义词。

然而,BIT(1)数据类型更适合存储布尔值(true[1]或false[0]),而TINYINT(1)更容易用于输出数据、查询等,并实现MySQL和其他数据库之间的互操作性。你也可以检查这个答案或线程。

MySQL还将BOOL, BOOLEAN数据类型转换为TINYINT(1)。

此外,阅读文档

对于MySQL 5.0.3及更高版本,您可以使用BIT。手册上说:

从MySQL 5.0.3开始,BIT数据类型用于存储位字段 值。一种BIT(M)类型允许存储M位值。M能量程 从1到64。

否则,根据MySQL手册,你可以使用BOOL或BOOLEAN,这是tinyint(1)的别名:

Bool, Boolean:这些类型是TINYINT(1)的同义词。值为 0被认为是假的。非零 值被认为是真。

MySQL还声明:

我们打算实现全布尔值 类型搬运,按照 标准SQL,在未来的MySQL 释放。

引用:http://dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html