代码之家  ›  专栏  ›  技术社区  ›  tom

MySQL中布尔值的Boolean vs tinyint(1)

  •  103
  • tom  · 技术社区  · 14 年前

    对于布尔值,MySQL数据库中最好使用哪种列类型?我用 boolean tinyint(1) .

    6 回复  |  直到 14 年前
        1
  •  167
  •   Māris Kiseļovs    9 年前

    这些数据类型是同义词。

        2
  •  96
  •   dj_segfault    14 年前

    我将在这里采用一种不同的方法,并建议您的开发人员理解代码和编译器/数据库理解代码一样重要。使用boolean可以做与使用tinyint相同的事情,但是它的优点是在语义上传达您的意图,这是值得的。

        3
  •  38
  •   Spudley Pat    14 年前

    boolean 在MySQL中不是一个独特的数据类型;它只是 tinyint . See this page in the MySQL manual .

    就我个人而言,我建议使用tinyint作为首选项,因为boolean不会像您认为的那样从名称开始执行操作,因此它可能会产生误导性代码。但在实际的层面上,这并不重要——它们都做相同的事情,所以使用它们都不会有任何收获或损失。

        4
  •  9
  •   Community dbr    7 年前

    枚举

    我不建议使用enum或tinyint(1),因为位(1)只需要1位来存储布尔值,而tinyint(1)需要8位。

    裁判

    TINYINT vs ENUM(0, 1) for boolean values in MySQL

        5
  •  6
  •   Kyle Morgan    7 年前

    但事实上 bool tinyint(1) 完全相同, 应该是首选选项,因为它带有你要做的事情的语义。此外,许多orm将转换为 布尔 转换为编程语言的本机布尔类型。

        6
  •  0
  •   smerlung    7 年前

    我的使用经验 潇洒 连接到 MySQL数据库 . 我使用以下脚本将不可为null的位(1)更改为可为null的tinyint(1):

    ALTER TABLE TableName MODIFY Setting BOOLEAN null;
    

    然后Dapper开始抛出异常。我试着看剧本前后的区别。并注意到位(1)已更改为tinyint(1)。

    然后我跑了:

    ALTER TABLE TableName CHANGE COLUMN Setting Setting BIT(1) NULL DEFAULT NULL;
    

    解决了问题。

        7
  •  0
  •   Bartłomiej Sobieszek    3 年前

    当您选择int或bool时,尤其是当nullable列起作用时,这一点尤为重要。

    想象一个产品有多张照片。你怎么知道哪张照片是产品封面?好吧,我们会用一列来表示它。

    到目前为止 product_image 表有两列: product_id is_cover

    酷吗?还没有。由于产品只能有一个封面,我们需要在这两列上添加一个唯一的索引。

    所以你可能会说“好吧,但是你可以使用空值,因为它们是由唯一的索引检查来指定的”,是的,这是事实,但是我们在这里失去了语言规则。

    我想说的是,在某些情况下,整数可以起到更好的作用,因为它不受严格的真或假含义的约束