2010-10-14 61 views
24

看来我应该使用tinyint();但我不知道如何实现它?如何添加布尔字段到MySQL?

的问题是,什么是你的建议,如果我需要有一个布尔字段在MySQL数据库和PHP与

+0

布尔字段也可以被解释为1和0的这样有一个tinyint字段将导致更快的数据库。如果你更快地索引它。以下所有答案对您都是有价值的! @Felix @Matthew @Haim做得好 – 2010-10-14 07:43:41

+0

@etbal是的确,所有非常有帮助! – Trufa 2010-10-14 07:45:34

回答

43

是的,TINYINT(1)是要走的路...你也可以使用BOOL or BOOLEAN这是同义词(所以它不会使差异)。

0评估为false在PHP和1true(实际上,任何其它数目的比0计算结果为true,但通常使用1)。

+1

谢谢非常有用,已经实施它! – Trufa 2010-10-14 07:50:26

+0

@Felix Kling没有任何其他数字比0评估为真http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html – 2011-08-20 19:50:30

+0

@Viswanathan:其实我在谈论PHP情况下,而不是MySQL。 – 2011-08-20 19:53:11

2

你是正确的,因为一般的解决办法是tinyint(1)修改it's值。您可以使用BOOL简称:

CREATE TABLE example (
     flag BOOL 
     ); 
2

你有TINYINT(1)或位

插入0或1的选项,这个领域

看到这个帖子的差异:

Tinyint vs Bit

+0

感谢您的澄清! – Trufa 2010-10-14 07:43:25

4

我不喜欢bool,BIT,TINYINT(1)。因为它们中没有一个实际是布尔值。您可以查看以下链接的“为什么”:

http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html

我会更好地利用:ENUM(“假”,“真”)不为空 - 为数据类型。你可以从PHP传递'true'或'false'(作为字符串)。它只需要1个字节来存储它!

+0

为什么不用ENUM('0','1')而不是 – tormuto 2015-08-26 09:54:32

+2

实际上,字符串'false'在PHP中具有讽刺意味。 – jonbaldie 2015-12-06 20:24:29

+0

@tormuto是的,你可以。这将有助于在阅读时在PHP中进行自动类型转换。但是使用ENUM这样做并不安全,因为您可能忘记从PHP传递字符串。如果有人错误地声明了ENUM('1','0'),会发生什么情况?我看到很多代码,如('是','否')。 – Muktadir 2015-12-25 23:05:37

0

我想既然你真的想执行一个布尔值在MySQL表字段(0,1)的约束,最好的射门被uning枚举

CREATE TABLE table_name(
    boolean_field_name ENUM('0', '1') 
);