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