MySql-在多个列中存储多个布尔值时使用哪种列类型?
我想在一个表中保存多个布尔值。我想使用多列,而不是一位(N)列。现在我在考虑是否应该使用Bool=tinyint(1)或bit(1)列。 我从一个类似的问题中读到这篇文章,想知道 但是,如果您有更多的真/假列,我建议您使用位,因为位列的每个值都放在同一个1字节中,直到填满为止 这是真的。有人能证实这一点吗?对于这种情况,我应该在2020年使用哪种列类型 谢谢,MySql-在多个列中存储多个布尔值时使用哪种列类型?,mysql,sql,database,boolean,multiple-columns,Mysql,Sql,Database,Boolean,Multiple Columns,我想在一个表中保存多个布尔值。我想使用多列,而不是一位(N)列。现在我在考虑是否应该使用Bool=tinyint(1)或bit(1)列。 我从一个类似的问题中读到这篇文章,想知道 但是,如果您有更多的真/假列,我建议您使用位,因为位列的每个值都放在同一个1字节中,直到填满为止 这是真的。有人能证实这一点吗?对于这种情况,我应该在2020年使用哪种列类型 谢谢, 关于本机的布尔类型用于存储布尔值。是的,显然BOOLEAN占用一个字节而不是一位(实际上可能不是bit(1)只使用一位空格;请参见下面的
关于本机的布尔类型用于存储布尔值。是的,显然
BOOLEAN
占用一个字节而不是一位(实际上可能不是bit(1)
只使用一位空格;请参见下面的注释)。但它不会对数据库占用的空间产生明显的影响。考虑一下,如果你有一个表中的10个布尔值,并且最终有一百万个记录,那么如果你使用了一点,BualangsV1.25MB占用的空间只有10MB。即使你有1亿条记录,也只有1GB的空间。如果您有1亿条记录,那么您将有足够的空间,1GB将不再重要
下面是关于布尔值
、TINYINT
和位
的一些注释,这些注释可能有助于澄清为什么要使用布尔值
:
BOOLEAN
用于存储布尔值。您可以将实现细节交给Mysql开发人员BOOLEAN
具有语义意义;它清楚地表明列的预期用途是存储布尔值位(1)
实际上也占用了1个字节。发件人:位(1)
需要(1+7)/8字节
或1字节
BOOLEAN
与TINYINT
同义,因此可以在BOOLEAN
中存储TRUE
和FALSE
以外的值(例如,您可以存储22
)。但是,如果您尝试将例如22
插入到布尔
列中,Mysql会将其解释为TRUE
(并且它会将0
解释为FALSE
)。因此,您不必担心奇怪的值进入BOOLEAN
列。看看这个例子本机
BOOLEAN
类型用于存储布尔值。是的,显然BOOLEAN
占用一个字节而不是一位(实际上可能不是bit(1)
只使用一位空格;请参见下面的注释)。但它不会对数据库占用的空间产生明显的影响。考虑一下,如果你有一个表中的10个布尔值,并且最终有一百万个记录,那么如果你使用了一点,BualangsV1.25MB占用的空间只有10MB。即使你有1亿条记录,也只有1GB的空间。如果您有1亿条记录,那么您将有足够的空间,1GB将不再重要
下面是关于布尔值
、TINYINT
和位
的一些注释,这些注释可能有助于澄清为什么要使用布尔值
:
BOOLEAN
用于存储布尔值。您可以将实现细节交给Mysql开发人员BOOLEAN
具有语义意义;它清楚地表明列的预期用途是存储布尔值位(1)
实际上也占用了1个字节。发件人:位(1)
需要(1+7)/8字节
或1字节
BOOLEAN
与TINYINT
同义,因此可以在BOOLEAN
中存储TRUE
和FALSE
以外的值(例如,您可以存储22
)。但是,如果您尝试将例如22
插入到布尔
列中,Mysql会将其解释为TRUE
(并且它会将0
解释为FALSE
)。因此,您不必担心奇怪的值进入BOOLEAN
列。看看这个例子您还可以使用VARCHAR数据类型来存储位(N),它将占用您首先存储的空间,例如“0101000”,这意味着您有7个布尔值。第二个和第四个是真的,另一个是假的,将在您的存储中使用7+1字节(CMIIW)
干杯:)您也可以使用VARCHAR数据类型来存储位(N),它将占用您首先存储的空间,例如“0101000”,这意味着您有7个布尔值。第二个和第四个是真的,另一个是假的,将在您的存储中使用7+1字节(CMIIW)
干杯:)你问这个问题是因为你担心他们会占用多少空间吗?没那么担心。我只是想有一个理由使用bit而不是bool,反之亦然。我找不到答案。你确定每个but应该是一个单独的列,而不是一个单独的行吗?要保存,让我们假设用户状态和类型以及concat和conv来获取位标志。如果你使用hibernate/JPA布尔值,通常将是int(1),我想他们更清楚你问的是因为你关心他们会占用多少空间?不是那么关心。我只是想有一个理由使用bit而不是bool,反之亦然。我找不到答案。你确定每个but都应该是一个单独的列,而不是一个单独的行吗?要保存,让我们假设用户状态和类型以及concat和conv来获取位标志。如果你使用的是hibernate/JPA布尔值通常是int(1),我想他们更清楚这个选项的答案