MySql - 在多列中存储多个boolean时使用哪种列类型?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql - 在多列中存储多个boolean时使用哪种列类型?相关的知识,希望对你有一定的参考价值。
我想在一个表中保存多个booleans,我想使用多列而不是一个Bit(N)列。我想使用多个列而不是一个Bit(N)列。现在我在考虑是否应该使用Bool = tinyint(1)或bit(1)列.我读到了这个较旧的 回答 从一个类似的问题,想知道如果
但如果你有更多的真假列,我建议你使用位列,因为位列的每个值都被放置在相同的1个字节中,直到它被填充。
是真。任何人都可以确认这一点吗?哪种列类型,我应该在2020年使用这种情况下?
谢谢,祝愿
原生的 BOOLEAN
类型是用来存储booleans的。是的,显然 BOOLEAN
占用了一个字节而不是一个位(实际上可能并不是这样的 BIT(1)
只用了一点空间,见下面的注释)。) 但它不会对你的数据库占用多少空间产生明显的影响。考虑一下,如果你在一个表中有10个booleans,最后你有100万条记录,那么booleans只占用了10MB的空间,而如果你使用一个位子,则占用了1.25MB的空间。即使你到了1亿条记录,也只有1GB的空间。如果你有1亿条记录,你就会有足够的空间,1GB也就无所谓了。
这里有一些关于的说明 BOOLEAN
, TINYINT
和 BIT
这可能会帮助澄清为什么你会想去与 BOOLEAN
:
BOOLEAN
是用来存储布尔值的。你可以相信mysql开发人员的实现细节。BOOLEAN
携带语义意义;它明确表示该列的预期目的是存储布尔值。- 事实证明
BIT(1)
实际上也占用了1个字节。从 文件:
BIT(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
列。请看这个 摆弄 为例。
你也可以使用VARCHAR数据类型来存储位(N),它将会占用你存储的空间,例如 "0101000 "意味着你有7个布尔值。第2和第4个是TRUE,其他的是FALSE,这将使用7+1个字节来存储(CMIIW)
干杯)
以上是关于MySql - 在多列中存储多个boolean时使用哪种列类型?的主要内容,如果未能解决你的问题,请参考以下文章
MySQL处理重复键错误插入具有多个唯一索引的表;不是多列唯一索引