布尔值vs tinyint(1)表示MySQL中的布尔值

tom*_*tom 116 mysql sql

什么列类型最适合在MySQL数据库中用于布尔值?我用,boolean但我的同事使用tinyint(1).

Mār*_*ovs 143

这些数据类型是同义词.

  • 是的 - http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html (18认同)
  • 我不会说数据_types_是同义词-tinyint(1)与bool相同,但是tinyint和bool不同。轻微的问题,但您的答案让我第一次阅读时就感到震惊 (3认同)
  • 这不能回答问题。虽然 tinyint(1) 在功能上与 bool 相同,但 OP 询问最好使用什么。@dj_segfault 的回答很好地解释了为什么在存储布尔值时 bool 比 tinyint(1) 更受欢迎。 (3认同)

dj_*_*ult 80

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

如果你使用tinyint,你应该看到的唯一值是0和1并不明显.布尔值总是为真或假.


Spu*_*ley 34

boolean在MySQL中不是一个独特的数据类型; 它只是一个同义词tinyint.请参阅MySQL手册中的此页面.

我个人建议使用tinyint作为首选项,因为boolean不会从名称中执行你认为它做的事情,因此它会产生潜在的误导性代码.但在实际水平上,它确实无关紧要 - 它们都做同样的事情,因此你不会通过使用任何一种来获得或失去任何东西.


Pra*_*pta 8

使用enum它简单快捷

我不推荐使用enum或tinyint(1),因为bit(1)只需要1位来存储布尔值,而tinyint(1)需要8位.

REF

TINYINT vs ENUM(0,1)表示MySQL中的布尔值

  • 如果您使用的是InnoDB,则最终使用的空间与tinyint一样多.从[高性能MySQL](http://www.amazon.com/High-Performance-MySQL-Optimization-Replication/dp/1449314287/)(percona家伙)"InnoDB商店[s]每个[位]列作为最小的整数类型,足以包含这些位,因此不保存任何存储空间." 唯一的好处是,如果您在BIT(morethan1)列中存储多个布尔值.因此,如果您只有一个布尔字段,则使用tinyint与InnoDB中的位相同,并且因为tinyint通常更容易使用,所以更可取. (11认同)

Kyl*_*gan 6

虽然这是真的,bool并且tinyint(1)在功能上是相同的,bool应该是更好的选择,因为它承载着你想要做什么语义。此外,许多ORM都将转换bool为编程语言的本机布尔类型。