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

MySql-在多个列中存储多个布尔值时使用哪种列类型?,mysql,sql,database,boolean,multiple-columns,Mysql,Sql,Database,Boolean,Multiple Columns,我想在一个表中保存多个布尔值。我想使用多列,而不是一位(N)列。现在我在考虑是否应该使用Bool=tinyint(1)或bit(1)列。 我从一个类似的问题中读到这篇文章,想知道 但是,如果您有更多的真/假列,我建议您使用位,因为位列的每个值都放在同一个1字节中,直到填满为止 这是真的。有人能证实这一点吗?对于这种情况,我应该在2020年使用哪种列类型 谢谢, 关于本机的布尔类型用于存储布尔值。是的,显然BOOLEAN占用一个字节而不是一位(实际上可能不是bit(1)只使用一位空格;请参见下面的

我想在一个表中保存多个布尔值。我想使用多列,而不是一位(N)列。现在我在考虑是否应该使用Bool=tinyint(1)或bit(1)列。 我从一个类似的问题中读到这篇文章,想知道

但是,如果您有更多的真/假列,我建议您使用位,因为位列的每个值都放在同一个1字节中,直到填满为止

这是真的。有人能证实这一点吗?对于这种情况,我应该在2020年使用哪种列类型

谢谢,
关于

本机的布尔类型用于存储布尔值。是的,显然
BOOLEAN
占用一个字节而不是一位(实际上可能不是
bit(1)
只使用一位空格;请参见下面的注释)。但它不会对数据库占用的空间产生明显的影响。考虑一下,如果你有一个表中的10个布尔值,并且最终有一百万个记录,那么如果你使用了一点,BualangsV1.25MB占用的空间只有10MB。即使你有1亿条记录,也只有1GB的空间。如果您有1亿条记录,那么您将有足够的空间,1GB将不再重要

下面是关于
布尔值
TINYINT
的一些注释,这些注释可能有助于澄清为什么要使用
布尔值

  • BOOLEAN
    用于存储布尔值。您可以将实现细节交给Mysql开发人员
  • BOOLEAN
    具有语义意义;它清楚地表明列的预期用途是存储布尔值
  • 原来
    位(1)
    实际上也占用了1个字节。发件人:
  • 位(M)大约需要(M+7)/8字节

    因此
    位(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个字节。发件人:
  • 位(M)大约需要(M+7)/8字节

    因此
    位(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),我想他们更清楚这个选项的答案