Answers:
从数值类型概述 ;
BIT [(M)]
位字段类型。M表示每个值的位数,从1到64。如果省略M,则默认值为1。
在MyISAM的MySQL 5.0.3中添加了此数据类型,并在5.0.5中将其扩展到了MEMORY,InnoDB,BDB和NDBCLUSTER。在5.0.3之前,BIT是TINYINT(1)的同义词。
TINYINT [(M)] [未签名] [零填充]
一个非常小的整数。有符号范围是-128至127。无符号范围是0至255。
另外考虑一下;
布尔,布尔
这些类型是TINYINT(1)的同义词。零值被认为是错误的。非零值被认为是正确的。
boolean
即使实际上只是一个字节,它也将占用一个字节,因此BIT(1)在v5.0.3之后会更好吗?
BOOL
/ BOOLEAN
是的别名,TINYINT(1)
而不是BIT
。当然,它们最终都占据了整个字节,但是从语义上讲BIT
会更合适。
所有这些理论讨论都很棒,但实际上,至少,如果您同时使用MySQL和SQL Server,则最好为布尔值坚持使用非二进制数据,原因很简单,当您使用布尔值时正在输出数据,查询等等。如果要实现MySQL和SQLServer之间的互操作性(即在两者之间同步数据),则尤其重要,因为BIT数据类型的处理在两者中是不同的。所以在实践中,如果坚持使用数字数据类型,那么麻烦就少得多。我建议MySQL坚持使用BOOL或BOOLEAN,它们将存储为TINYINT(1)。甚至MySQL Workbench和MySQL Administrator显示BIT数据类型的方式也不是很好(二进制数据有点符号)。
BIT仅应允许0和1(如果字段未定义为NOT NULL,则为NULL)。TINYINT(1)允许将任何值存储在单个字节中,即-128..127或0..255,具体取决于该值是否为无符号(1表示您仅打算使用一个数字,但它确实不会阻止您存储更大的值)。
对于低于5.0.3的版本,BIT被解释为TINYINT(1),因此没有两者之间区别。
BIT的语义为“这是布尔值”,某些应用程序会以相同的方式考虑TINYINT(1)(由于MySQL对待它的方式),因此,如果应用程序检查类型,则它们可能会将列格式化为复选框并据此确定格式。