mysql-哪种列类型用于在多个列中存储多个布尔值?

e7arh2l6  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(513)

我想在一个表中保存多个布尔值。我想使用多列而不是一位(n)列。现在我在考虑是否应该使用bool=tinyint(1)或bit(1)列。我从一个类似的问题中读到了这个古老的答案,想知道
但是如果有更多的真/假列,我建议您使用位,因为位列的每个值都放在同一个1字节中,直到它被填充为止。
这是真的。有人能证实吗?我应该在2020年使用哪种列类型来处理这个案例?
谢谢,问候

66bbxpm5

66bbxpm51#

本地人 BOOLEAN 类型用于存储布尔值。是的,很明显 BOOLEAN 占用一个字节而不是一个位(实际上可能不是 BIT(1) 只占用一位空间;见下文注解)。但它不会对数据库占用的空间产生明显的影响。考虑一下,如果一个表中有10个布尔值,并且最终有100万条记录,那么布尔值只占用10mb的空间,而使用一点布尔值则占用1.25mb的空间。即使你有一亿张唱片,也只有1gb的空间。如果你有一亿条记录,你就有足够的空间,1gb就无关紧要了。
这里有一些关于 BOOLEAN , TINYINT 以及 BIT 这可能有助于澄清你为什么要去 BOOLEAN : BOOLEAN 用于存储布尔值。您可以将实现细节交给mysql开发人员。 BOOLEAN 承载语义;它清楚地表明该列的预期用途是存储布尔值。
事实证明 BIT(1) 实际上也占用1字节。根据文件:
位(m)大约需要(m+7)/8字节
所以呢 BIT(1) 需要 (1+7)/8 bytes 或者 1 byte .
你可以看看,因为 BOOLEAN 是同义词 TINYINT ,可以存储除 TRUE 以及 FALSE 在一个 BOOLEAN (例如,您可以存储 22 ). 但是,如果您尝试插入例如。 22 变成一个 BOOLEAN 列,mysql将其解释为 TRUE (它将解释 0 作为 FALSE ). 所以,你不必担心奇怪的价值观进入你的生活 BOOLEAN 列。请参见下面的sql fiddle以获取示例。

2cmtqfgy

2cmtqfgy2#

您还可以使用varchar数据类型来存储位(n),它将占用您首先存储的空间,例如“0101000”,这意味着您有7个布尔值。第二个和第四个是真的,另一个是假的,在你的存储器中使用7+1字节(cmiiw)
干杯:)

相关问题