布尔用途列 char(0) 或 tinyint(1)

Ara*_*avi 1 mysql performance database-design optimization datatypes

对于布尔用途列,哪个更好:可为空char(0)tinyint(1).

我知道 bool 是 tinyint(1) 的别名,但在 O'reilly 出版的“高性能 MySQL”一书中说:

“如果您想在单个存储空间中存储真/假值,另一种选择是创建一个可为空的 CHAR(0) 列。该列能够存储值 (NULL) 或零的缺失-length 值(空字符串)。"

哪个更适合大小、性能、索引或...

更新:我发现此链接对这个问题很有用: Innodb Tables 的高效布尔值存储

Shl*_*ach 5

您应该记住,即使作为复合索引的一部分,也不可​​能对 CHAR(0) 列进行索引。

就大小而言,没有什么比 NULLable CHAR(0) 更好;但是你有多少呢?与表中的其他数据类型相比?通常,与整体数据类型和大小相比,这是可以忽略的。

最清楚的是 BOOL/TINYINT UNSIGNED。最明显的是期望什么值。

否则请在我的帖子中考虑许多替代方案,并请参阅评论中的好主意:选择 MySQL 布尔数据类型

  • @NeilMcGuigan 不一定(如果 True 为 3%,False 为 97%,您可能仍想优化 `col=TRUE`)。它在复合索引中更有用。 (2认同)