如何在MySQL中添加一个布尔字段?

27

看起来我应该使用 tinyint();但是我不知道如何实现它?

问题是,如果我需要在 MySQL 数据库中拥有一个布尔字段并使用 PHP 修改它的值,您有什么建议?


一个布尔字段也可以被解释为1和0,因此拥有一个tinyint字段将导致更快的数据库。如果你对它进行索引,速度会更快。以下所有答案对你都没有价值!@Felix @Matthew @Haim 做得好 - Etienne Marais
@etbal 是的,确实非常有帮助! - Trufa
5个回答

46

TINYINT(1)是一个不错的选择,你也可以使用其同义词BOOLBOOLEAN,它们没有区别。

0在PHP中代表false1代表true(实际上,除了0之外的任何数字都被视为true,但通常使用1)。


@Felix Kling除了0以外的任何数字都会被评估为true。http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html - Vishwanath Dalvi
@Viswanathan:实际上我在这种情况下说的是PHP,而不是MySQL。 - Felix Kling

4
我不喜欢bool、BIT和TINYINT(1)中的任何一种,因为它们实际上都不是布尔类型。你可以查看下面的链接了解原因:http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html 我更喜欢使用ENUM('false', 'true') not null作为数据类型。你可以从PHP传递'true'或'false'(作为字符串),而且只需1个字节就可以存储它!

为什么不使用 ENUM ('0', '1') 呢? - tormuto
3
在PHP中,字符串'false'实际上是具有真值(truey)的,这有点讽刺。 - jonbaldie
@tormuto 是的,你可以这样做。这将有助于在 PHP 读取时进行自动类型转换。但是对于 ENUM 来说,这不是一个安全的做法,因为你可能会忘记从 PHP 传递字符串。如果有人错误地声明了 ENUM('1', '0'),会发生什么?我看到很多代码都像 ('yes', 'no') 这样。 - Muktadir

2

你说得对,通用解决方案是 tinyint(1)。你可以使用 BOOL 来代替:

CREATE TABLE example (
         flag BOOL
       );

2

您可以选择tinyint(1)或bit类型。

将0或1插入此字段。

请参阅以下帖子以了解区别:

Tinyint vs Bit


0

我认为,如果您想在MySQL表字段上强制使用布尔(0,1)约束,则最好的方法是使用枚举。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接