使用BOOLEAN而不是TINYINT(1)有什么好处?


16

从MySQL手册中说:

布尔,布尔

这些类型是TINYINT(1)的同义词。零值被认为是错误的。非零值被视为true:

我创建了一个BOOLEAN列,0并将其作为默认值。然后将值更新为2。从逻辑上讲,我希望MySQL接受一个01一个布尔值。但是,MySQL不会发出错误或阻止我执行更新。

如果BOOLEAN的工作方式与TINYINT(1)完全相同,那么我使用TINYINT(1)还是BOOLEAN会有什么不同吗?

Answers:


11

这两个实际上是同义词,因此您可以互换使用它们。您不会看到它们之间的任何区别。

如果只想允许0和1,则仍然可以使用该bit类型。


1
@QuestionOverflow请记住,这BIT实际上是一个位字段,它紧凑地容纳1到64位。
David Harkness 2014年

2

如果您正在与其他人一起工作(或想提醒自己),则可以使用数据类型BOOLEAN来建议该数据仅应采用1或0的值。


0

在我看来确实存在差异。

在一个表中,我使用的是定义为tinyint的列,该列上有索引。当我调用以下查询“从列为true的表中解释*选择*”时,它表示将读取表中的所有行(尽管“ keys”列显示了以下内容,“ possible_keys”和“ ref”列为空指数)。

将查询更改为“从列= 1的表中解释选择*”,索引会正确插入,并为“可能的键”和“参考”列分配值,并且将“行”设置为低得多的数字。

我还尝试将“ true”替换为“ false”,将1替换为0,并得到可比的结果。

更进一步,我从tinyint切换为int,这没有什么区别。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.