我不想在这里触发一场宗教战争,但似乎有两种思路可以在数据库中表示布尔值.有人说bit
是适当的数据类型,而其他人认为tinyint
更好.
我所知道的唯一区别是这些:
bit
:存储大小为1位,可能的值为0或1
tinyint
:存储大小为1个字节,可能的值为0-255
当您需要表示布尔值时,哪种数据类型更好?是tinyint
值得的额外开销"以防万一"你需要值> 1?
向表中添加位列时,它将占用每个记录中的整个字节,而不仅仅是一个位.添加第二位列时,它将存储在同一个字节中.第九位列需要第二个存储字节.具有1位列的表将不会获得任何存储优势.
Tinyint和bit都可以使用,我已成功使用它们并且没有强烈的偏好.
比特......除非你是"真/假/文件未找到"部落
万一你没有得到参考...
在Linq2SQL的情况下,位使用true/false,这使得编程更容易.这两者都有优势.
还需要考虑编程维护.如果您(或初级实习生程序员)使用2,3,25,41,167,200等会怎样?记录在哪里?比特是自我记录的,非常普遍.
我在适当时使用位.除了它在语义上是正确的类型(语义计数!)之外,单行中的多个位字段(最多8个)(无论如何在SQL Server上)可以合并到单个存储字节中.在第八个之后,接下来的8需要一个额外的字节,依此类推.
参考文献:
SQL 2000
SQL 2005
SQL 2008
对于MySql用户 - 为什么不在MySQL中使用BIT列