MySQL中的BIT和TINYINT有什么区别?

时间:2008-11-14 14:29:46

标签: mysql bit tinyint

你会在哪些情况下使用哪种?有什么区别吗?我通常使用持久性引擎来存储布尔值?

6 个答案:

答案 0 :(得分:110)

TINYINT是一个8位整数值,BIT字段可以存储在1位,BIT(1)和64位之间,BIT(64)。对于布尔值,BIT(1)非常常见。

答案 1 :(得分:51)

来自Overview of Numeric Types;

<强> 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)它是否可以