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

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

127683 次浏览

也许是错的,但是:

Tinyint is an integer between 0 and 255

位是1或0

因此对我来说 bit 是布尔型的选择

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

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

For versions older than 5.0.3, BIT is interpreted as TINYINT(1), so there's no difference there.

BIT has a "this is a boolean" semantic, and some apps will consider TINYINT(1) the same way (due to the way MySQL used to treat it), so apps may format the column as a check box if they check the type and decide upon a format based on that.

数值类型概述;

[(M)]

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

此数据类型是在 MySQL 中添加的 在5.0.3之前,BIT 是一个基于 MyISAM 的5.0.3版本,在5.0.5版本中扩展到了 MEMORY、 InnoDB、 BDB 和 NDBCLUSTER TINYINT (1)的同义词。

丁尼特[(M)][未签名][零填充]

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

Additionally consider this;

BOOL, BOOLEAN

这些类型是 TINYINT (1)。零的值是 considered false. Non-zero values are considered true.

所有这些理论上的讨论都很棒,但是在现实中,至少如果您正在使用 MySQL,并且也是为 SQLServer 而使用,那么最好坚持使用非二进制数据作为布尔值,原因很简单,当您输出数据、查询等时,使用非二进制数据更容易。如果您试图实现 MySQL 和 SQLServer 之间的互操作性(即在两者之间同步数据) ,这一点尤其重要,因为两者对 BIT 数据类型的处理是不同的。所以在实践中,如果你坚持使用数字数据类型,你会少很多麻烦。我建议 MySQL 坚持使用 BOOL 或 BOOLEAN,它们被存储为 TINYINT (1)。甚至 MySQL 工作台和 MySQL 管理员显示 BIT 数据类型的方式也不太好(它是二进制数据的一个小符号)。所以务实一点,省去你自己的麻烦(不幸的是,这是我的经验之谈)。

根据我的经验,我告诉你 BIT 在 linux 操作系统类型(Ubuntu for ex)上有问题。 我在 windows 上开发了 db,在 Linux 上部署了所有东西之后,我遇到了从具有 BIT DATA TYPE 的表中插入或选择查询的问题。

比特现在不安全。 我改成 tinyint (1) ,工作得很完美。我的意思是,您只需要一个值来区分它是1还是0,tinyint (1)对此没有问题