MySql - 在多列中存储多个boolean时使用哪种列类型?

问题描述 投票:0回答:1

我想在一个表中保存多个booleans,我想使用多列而不是一个Bit(N)列。我想使用多个列而不是一个Bit(N)列。现在我在考虑是否应该使用Bool = tinyint(1)或bit(1)列.我读到了这个较旧的 回答 从一个类似的问题,想知道如果

但如果你有更多的真假列,我建议你使用位列,因为位列的每个值都被放置在相同的1个字节中,直到它被填充。

是真。任何人都可以确认这一点吗?哪种列类型,我应该在2020年使用这种情况下?

谢谢,祝愿

mysql database mysqli boolean multiple-columns
1个回答
2
投票

原生的 BOOLEAN 类型是用来存储booleans的。是的,显然 BOOLEAN 占用了一个字节而不是一个位(实际上可能并不是这样的 BIT(1) 只用了一点空间,见下面的注释)。) 但它不会对你的数据库占用多少空间产生明显的影响。考虑一下,如果你在一个表中有10个booleans,最后你有100万条记录,那么booleans只占用了10MB的空间,而如果你使用一个位子,则占用了1.25MB的空间。即使你到了1亿条记录,也只有1GB的空间。如果你有1亿条记录,你就会有足够的空间,1GB也就无所谓了。

这里有一些关于的说明 BOOLEAN, TINYINTBIT 这可能会帮助澄清为什么你会想去与 BOOLEAN:

  1. BOOLEAN 是用来存储布尔值的。你可以相信Mysql开发人员的实现细节。
  2. BOOLEAN 携带语义意义;它明确表示该列的预期目的是存储布尔值。
  3. 事实证明 BIT(1) 实际上也占用了1个字节。从 文件:

BIT(M)大约需要(M+7)8个字节。

所以 BIT(1) 将需要 (1+7)/8 bytes1 byte.

  1. 你可以读,因为 BOOLEAN 同义词 TINYINT的值,你可以存储除 TRUEFALSE 在...中 BOOLEAN (例如,你可能可以存储一个? 22). 然而,如果你试图将例如 22 插入到一个 BOOLEAN 列,Mysql会将其解释为 TRUE (它将解释一个 0 作为 FALSE). 所以,你不需要担心奇怪的值会进入你的 BOOLEAN 列。请看这个 摆弄 为例。

0
投票

你也可以使用VARCHAR数据类型来存储位(N),它将会占用你存储的空间,例如 "0101000 "意味着你有7个布尔值。第2和第4个是TRUE,其他的是FALSE,这将使用7+1个字节来存储(CMIIW)

干杯)

© www.soinside.com 2019 - 2024. All rights reserved.