位与布尔列


12

假定位字段只是数据的二进制表示形式,则需要以稍微“奇怪”的方式进行查询。

使用位字段作为布尔值实际上有什么好处吗?从我看来,这似乎表明空间是唯一的真正好处。

Answers:


14

就个人而言,我会将用作BOOLEAN布尔值。但是请记住,在MySQL中,警告BOOLEAN只是TINYINT(1) [src]的同义词。

当然,这意味着如果您不小心,可以使用0或1以外的值。为避免这种情况,您可以使用别名,TRUE以及FALSE在插入和更新数据时将它们分别映射为1和0。

为了完整起见,在5.0.3之前BIT也是的同义词TINYINT(1)


1

如果我对它的理解正确,那么BOOLEAN总是每列使用1个字节,但是BIT(n)将使用为保留给定位数所需要的尽可能少的字节。

因此BIT可以节省一些空间,但是如果需要使用SQL查询它们,则BOOLEAN更易于使用。

如果我有一组应用程序可以理解并存储在应用程序中单个字段中的标志,那么我将寻求使用BIT(n)。但是,如果我有需要从SQL查询的列,我将使用BOOLEAN。

一个示例是一个应用程序,该应用程序使用标志来记录事件应在几周内运行,如果事件在给定的一周内运行,则每周需要一点时间。如果要使数据易于在数据库中查询,则可以在两个表之间对其进行“规范化”,但是如果仅需要将数据存储在数据库中,则最好以应用程序使用它的形式保存数据在。

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.