当前位置:  开发笔记 > 后端 > 正文

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

如何解决《MySQL中的BIT和TINYINT有什么区别?》经验,为你挑选了4个好方法。

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



1> Robert Gambl..:

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


TINYINT可以是有符号或无符号的,与负数有关.Bit只是存储位而不签名数据,您可以自己解释MSB.
TINYINT和BIT(8)之间有什么区别?
为了避免混淆,应该补充说TINYINT和BIT(1)的[存储要求](https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html)没有区别BOOL和BOOLEAN是TINYINT(1)[Numeric Type Overview](https://dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html)的同义词.

2> Nelson Miran..:

从数值类型概述 ;

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)的同义词.值为零被视为false.非零值被认为是真实的.


你是说`boolean`会占用一个字节,即使它真的只是一点,所以在v5.0.3之后BIT(1)会更好吗?
就实际存储而言,BIT(1)仍然占用最少一个字节.BIT(M)=(M + 7)/ 8字节.(1 + 7)/ 8 = 1个字节.请参见[数字类型存储要求](https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html#data-types-storage-reqs-numeric).
是的@Pacerier.Boolean只是数字字段的丑陋别名.

3> Sheldmandu..:

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



4> Michael Mads..:

BIT应该只允许0和1(如果字段未定义为NOT NULL,则为NULL).TINYINT(1)允许任何可以存储在单个字节中的值,-128..127或0..255,具体取决于它是否为无符号(1表示您只打算使用单个数字,但它确实不要阻止你存储更大的值).

对于早于5.0.3的版本,BIT被解释为TINYINT(1),因此没有区别.

BIT有一个"这是一个布尔"的语义,有些应用程序会以相同的方式考虑TINYINT(1)(由于MySQL用来对待它的方式),因此如果他们检查类型,应用程序可能会将列格式化为复选框并根据该格式决定格式.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有