你会在哪些情况下使用哪种?有什么区别吗?我通常使用持久性引擎来存储布尔值?
答案 0 :(得分:110)
TINYINT是一个8位整数值,BIT字段可以存储在1位,BIT(1)和64位之间,BIT(64)。对于布尔值,BIT(1)非常常见。
答案 1 :(得分:51)
<强> BIT [(M)] 强>
位字段类型。 M表示 每个值的位数,从1到 64.如果省略M,则默认值为1.
此数据类型已添加到MySQL中 5.0.3用于MyISAM,并在5.0.5中扩展到MEMORY,InnoDB,BDB和NDBCLUSTER。在5.0.3之前,BIT是一个 TINYINT(1)的同义词。
TINYINT [(M)] [未签名] [ZEROFILL]
一个非常小的整数。签名范围 是-128到127.无符号范围是 0到255。
另外考虑一下;
BOOL,BOOLEAN
这些类型是同义词 TINYINT(1)。值为零 认为是假的。非零值是 被认为是真的。
答案 2 :(得分:32)
所有这些理论上的讨论都很棒,但实际上,至少如果你使用的是MySQL,而且对于SQLServer也是如此,最好坚持使用非二进制数据为你的布尔值,原因很简单,因为它更容易工作当你输出数据,查询等时。如果您正在尝试实现MySQL和SQLServer之间的互操作性(即您在两者之间同步数据),这一点尤其重要,因为BIT数据类型的处理在两者中是不同的。因此,如果你坚持使用数值数据类型,那么在实践中你将会有更少的麻烦。我建议MySQL坚持BOOL或BOOLEAN,它存储为TINYINT(1)。即使MySQL Workbench和MySQL Administrator显示BIT数据类型的方式也不好(它是二进制数据的一个小符号)。所以要务实并为自己省去麻烦(不幸的是,我是从经验中说出来的)。
答案 3 :(得分:11)
BIT应该只允许0和1(如果字段未定义为NOT NULL,则为NULL)。 TINYINT(1)允许任何可以存储在单个字节中的值,-128..127或0..255,具体取决于它是否为无符号(1表示您只打算使用单个数字,但它确实不要阻止你存储更大的值。)
对于早于5.0.3的版本,BIT被解释为TINYINT(1),因此没有区别。
BIT有一个“这是一个布尔”的语义,有些应用程序会以相同的方式考虑TINYINT(1)(由于MySQL用来处理它的方式),因此应用程序可以将列格式化为复选框检查类型并根据它确定格式。
答案 4 :(得分:3)
可能错了,但是:
Tinyint是0到255之间的整数
位为1或0
因此对我而言,布尔的选择是
答案 5 :(得分:0)
根据我的经验,我告诉你BIT在linux操作系统类型上存在问题(Ubuntu for ex)。 我在Windows上开发了我的数据库,在我在linux上部署了所有内容之后,我遇到了从具有BIT DATA TYPE的表中插入或选择的查询的问题。
现在比特不安全。 我改成了tinyint(1)并且工作得很好。我的意思是你只需要一个值来区分,如果它是1或0而tinyint(1)它是否可以