为啥 MySQL 将布尔值解释为 TINYINT(1) 而不是 BIT(1)?

Posted

技术标签:

【中文标题】为啥 MySQL 将布尔值解释为 TINYINT(1) 而不是 BIT(1)?【英文标题】:Why MySQL interprets Boolean as TINYINT(1) instead of BIT(1)?为什么 MySQL 将布尔值解释为 TINYINT(1) 而不是 BIT(1)? 【发布时间】:2012-01-30 01:48:19 【问题描述】:

当只考虑两个可能的值,0 & 1 或 True & False 时,很明显 BIT(1) 做得更好:

BIT(1) 只强制 2 个可能的值:0 和 1,而 TINYINT(1) 可以接受任何小于 10 (0,1,2,3,4,5....) 的整数值模棱两可。 多个 BIT(1) 列可以组合成字节,因此它们比多个 TINYINT(1) 列需要的空间更少。

那么为什么 mysql 将布尔值解释为 TINYINT(1),而不是 BIT(1)?在处理布尔值时使用 TINYINT(1) 优于 BIT(1) 有什么优势吗?

【问题讨论】:

【参考方案1】:

这取决于版本和数据库引擎和驱动程序

在 5.05+ 中使用 MyISAM 和 InnoDB 正确支持 BIT 需要告知一些 JDBC 驱动程序(例如 Kettle 的捆绑驱动程序)

但 BIT 当然比 TINYINT 更可取。 保留 TINYINT 的只是传统和惯性……

【讨论】:

+1 用于惯性。在几乎所有情况下,我仍然无缘无故地使用TINYINT(1) 惯性也是+1。我仍然使用 TINYINT(1),因为我最喜欢的 SQL 编辑器不允许像 TINYINT 那样简单地编辑 BIT 数据……而且在某些情况下它可以节省大量时间。

以上是关于为啥 MySQL 将布尔值解释为 TINYINT(1) 而不是 BIT(1)?的主要内容,如果未能解决你的问题,请参考以下文章

“将 Tiny 视为布尔值”和实体框架 4

mysql 数据库中的布尔字段

如何将布尔字段添加到 MySQL?

将 tinyint 映射为布尔休眠

为啥 MySQL 不定义布尔数据类型?

哪个更快: char(1) 或 tinyint(1) ?为啥?