有没有理由不将SQL中的布尔值存储为位数据类型?

ano*_*res 34 sql t-sql

有没有理由不将SQL中的布尔值存储为没有NULL的位数据类型?我看到它们经常作为整数存储而没有约束来限制值为0和1,并且作为字符串使用T/F,True/False,yes/no等等,再次没有约束.将它们存储为位并不必担心额外的约束是不是更好?我在这里错过了什么?

Pow*_*ord 46

我总是坚持使用最小的数据类型来存储它.

  • SQLServer:BIT
  • Oracle:NUMBER(1)(或PL/SQL中的BOOLEAN)
  • MySQL:TINYINT(iirc BOOLEAN自动映射到此)

编辑:Oracle的BOOLEAN只是PL/SQL,而不是表定义.更新了答案以反映这一点.


SQL*_*ace 14

通常发生的事情是,有人想要添加一个也许是和否,如果你有一点,那么现在你必须将你的所有代码更改为tinyint

如果你开始使用tinyint那么你就不要......相信我,这比你想象的更多


The*_*TXI 9

我看到它们经常作为整数存储而没有约束来限制值为0和1,并且作为字符串使用T/F,True/False,yes/no等等,再次没有约束.将它们存储为位并不必担心额外的约束是不是更好?

是!

我在这里错过了什么?

实际上它应该是"我在这里不缺少什么?" 答案是:常识.


HLG*_*GEM 5

不这样做的一些原因包括:

并非所有数据库都有一些数据类型,因此您可以使用int来代替不同的后端

在某些数据库中,您无法索引位字段.

而且你经常拥有的并不是真正的错误,是/否,没有其他可能性.例如,您可能有一个状态的位字段意味着打开或关闭.但后来你意识到你也需要取消身份.