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

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

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

替代文字http://dev.mysql.com/common/logos/logo_mysql_sun_a.gif

从数字types概述 ;

BIT [(M)]

位字段types。 M表示每个值的位数,从1到64.如果省略M,则缺省值为1。

这个数据types被添加到MyISAM的MySQL 5.0.3中,并且在5.0.5中被扩展到了MEMORY,InnoDB,BDB和NDBCLUSTER。 在5.0.3之前,BIT是TINYINT(1)的同义词。

TINYINT [(M)] [UNSIGNED] [ZEROFILL]

一个非常小的整数。 有符号的范围是-128到127.无符号的范围是0到255。

另外考虑这个;

BOOL,BOOLEAN

这些types是TINYINT(1)的同义词。 值为零被认为是错误的。 非零值被认为是正确的。

所有这些理论上的讨论都很棒,但实际上,至less如果你使用的是MySQL,而且确实是用于SQLServer,最好还是坚持使用非二进制数据来处理布尔值,原因很简单,因为当你重新输出数据,查询等。 如果您试图实现MySQL和SQLServer之间的互操作性(即您在两者之间同步数据),这一点尤其重要,因为BIT数据types的处理在两者中是不同的。 所以在实践中,如果你坚持使用数字数据types,你将会减less很多麻烦。 我会build议MySQL坚持布尔或BOOLEAN存储为TINYINT(1)。 即使MySQL Workbench和MySQL Administrator显示BIT数据types的方式也不好(这是二进制数据的一个小符号)。 所以要切实可行并且省去麻烦(不幸的是我是从经验中讲的)。

BIT应该只允许0和1(和NULL,如果该字段没有被定义为NOT NULL)。 TINYINT(1)允许任何值可以存储在一个单一的字节,-128..127或0..255取决于它是否是无符号的(1表示你打算只使用一个数字,但它不妨碍你存储更大的价值)。

对于5.0.3以前的版本,BIT被解释为TINYINT(1),所以在这里没有区别。

BIT有一个“这是一个布尔”的语义,有些应用程序会以同样的方式考虑TINYINT(1)(因为MySQL用来处理它),所以应用程序可以将列的格式设置为checkbox,如果他们检查types并基于此决定格式。

可能是错的,但是:

Tinyint是一个0到255之间的整数

位是1或0

所以对于我来说是布尔人的select

根据我的经验,我告诉你,BIT在Linux操作系统types(Ubuntu for ex)上有问题。 我在Windows上开发了我的数据库,在Linux上部署了所有的东西之后,我遇到了插入或从具有BIT数据types的表中select的查询的问题。

位现在不安全。 我改为tinyint(1)并完美工作。 我的意思是你只需要一个值来区分,如果它是1或0和tinyint(1)没关系