Mark D Asked: 2012-03-30 06:36:24 +0800 CST2012-03-30 06:36:24 +0800 CST 2012-03-30 06:36:24 +0800 CST 位与布尔列 772 鉴于位字段只是数据的二进制表示,需要以稍微“奇怪”的方式进行查询。 使用位字段作为布尔值是否真的提供了任何好处?从我所见,这似乎表明空间是唯一真正的好处。 mysql database-design 2 个回答 Voted Best Answer Derek Downey 2012-03-30T11:02:50+08:002012-03-30T11:02:50+08:00 就个人而言,我会使用BOOLEAN布尔值。但请记住,在 MySQL 中,BOOLEAN它只是TINYINT(1) [src]的同义词。 当然,这意味着如果您不小心,您可以使用 0 或 1 以外的值。为避免这种情况,您可以在插入和更新数据时使用别名TRUE,FALSE因为它们分别映射到 1 和 0。 为了完整起见,在 5.0.3 之前,BIT也是TINYINT(1). Ian Ringrose 2015-09-15T07:04:36+08:002015-09-15T07:04:36+08:00 如果我理解正确,BOOLEAN 总是每列使用 1 个字节,但 BIT(n) 将使用保持给定位数所需的尽可能少的字节。 因此 BIT 可能会节省一些空间,但如果您需要使用 SQL 查询它们,则 BOOLEAN 更容易使用。 如果我有一组应用程序可以理解的标志,并存储在应用程序的单个字段中,那么我将寻求使用 BIT(n)。但是,如果我有需要从 SQL 查询的列,我将使用 BOOLEAN。 一个例子是一个应用程序,它使用标志来记录一个事件应该在几周内运行,如果事件在给定的一周内运行,则每周 bit 为 1。如果要使数据在数据库中易于查询,它将跨两个表“标准化”,但如果数据只需要存储在数据库中,那么最好以应用程序使用的形式保存在。
就个人而言,我会使用
BOOLEAN
布尔值。但请记住,在 MySQL 中,BOOLEAN
它只是TINYINT(1)
[src]的同义词。当然,这意味着如果您不小心,您可以使用 0 或 1 以外的值。为避免这种情况,您可以在插入和更新数据时使用别名
TRUE
,FALSE
因为它们分别映射到 1 和 0。为了完整起见,在 5.0.3 之前,
BIT
也是TINYINT(1)
.如果我理解正确,BOOLEAN 总是每列使用 1 个字节,但 BIT(n) 将使用保持给定位数所需的尽可能少的字节。
因此 BIT 可能会节省一些空间,但如果您需要使用 SQL 查询它们,则 BOOLEAN 更容易使用。
如果我有一组应用程序可以理解的标志,并存储在应用程序的单个字段中,那么我将寻求使用 BIT(n)。但是,如果我有需要从 SQL 查询的列,我将使用 BOOLEAN。
一个例子是一个应用程序,它使用标志来记录一个事件应该在几周内运行,如果事件在给定的一周内运行,则每周 bit 为 1。如果要使数据在数据库中易于查询,它将跨两个表“标准化”,但如果数据只需要存储在数据库中,那么最好以应用程序使用的形式保存在。