MySQL数据库中的布尔字段

21

我希望在MySQL数据库中将我的值保存为布尔类型。但是无论如何,我都不能够实现这个目的,MySQL自动将它保存为tinyInt类型。另外,请告诉我布尔类型的默认值以及我们如何传递这些值?

3个回答

39

在MySQL中,BOOLEAN类型是TINYINT的同义词。没有专门的BOOLEAN类型。

可以接受的值是TINYINT的值,即0表示假,1-255(最好为1)表示真。


但是为什么bool和tinyint不同。如果它们相同,就应该只有一个。 - samir chauhan
没有'BOOL'。只有'TINYINT',可以写成'BOOL'。 - Mchl
我现在明白了,但我只是困惑为什么他们在MySQL中保留了bool,如果我们可以使用tinyInt。应该从列表中删除Bool。 - samir chauhan
它用于与其他SQL变种兼容。还有其他类似的数据类型,例如DECIMALNUMERIC - Mchl

8

MySQL 实际上没有 BOOLEAN 类型,如果创建 BOOLEAN 列,则实际上是 TINYINT。

然而,将 TINYINT 视为布尔值并不太成问题,如果您将 0 视为 false,非 0 值视为 true,则可以正常使用。在 PHP 中,类似于 if ($column) 的语句将在 $column 是除了 0 或能被解释为 0 的任何值时返回 true。如果需要明确地将其转换为布尔值,可以通过 $column = ($column != 0); 轻松完成。


0

我需要听到这个。我在想如何在MYSQL中设置布尔字段。

但是看到只支持tinyint,我在Python中将布尔值转换为整数,然后再将它们插入数据库。

is_holiday = 0
if row[4] != 'FALSE':
    is_holiday = 1
                    
#   insert a record into DB
cursor.execute("INSERT into sales(store, department, date, weekly_sales, is_holiday) VALUES(%s, %s, %s, %s, %s)", (row[0], int(row[1]), sales_date, float(row[3]), is_holiday))

这并没有回答问题。一旦您拥有足够的声望 ,您就可以在任何帖子上发表评论; 相反,提供不需要向提问者询问澄清问题的答案。- 来自审核 - Andy Gee
将False值视为0,True值视为1并不能证明一个合格的答案,对吗?@Andy Gee - izudada
实际上,问题已经说明了“但是我不知道为什么无法保存它,mysql会自动将其保存为tinyInt类型”。因此,用户已经知道了这一点,问题是关于不使用tiny int的。被接受的答案解释说:“BOOLEAN类型是TINYINT的同义词”,并解释了默认值如何在phpmyadmin界面中应用(而不是伪代码,因为伪代码不适用于phpmyadmin)。 - Andy Gee

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