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

8

当考虑仅有两个可能值时,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)是否有优势?

1个回答

6

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

  • 在 MyISAM 和 InnoDB 中,5.05+ 版本已经很好地支持了 BIT。
  • 一些 JDBC 驱动程序需要告知此信息(例如 Kettle 的捆绑驱动程序)。

但是,当然,BIT 优于 TINYINT。
只是传统和惯性使得 TINYINT 仍被使用...


+1 针对惯性。我在几乎所有情况下仍然使用 TINYINT(1),但没有充分的理由。 - Michael Berkowski
在惯性方面我也是认同+1。我仍然使用TINYINT(1),因为我的最爱SQL编辑器不允许像TINYINT那样简单地编辑BIT数据...而且在某些情况下可以节省很多时间。 - Donatello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接