真/假与myS​​QL中的0/1相比

Som*_*ens 51 mysql

哪个在mySQL数据库中更快?布尔值,或使用零和一来表示布尔值?我的前端只有一个是/否单选按钮.

Mar*_*ams 50

启用"使用布尔"选项的某些"前端"会将所有TINYINT(1)列视为布尔值,反之亦然.

这允许您在应用程序中使用TRUE和FALSE而不是1和0.

这根本不会影响数据库,因为它是在应用程序中实现的.

BOOLEANMySQL中没有真正的类型.BOOLEAN只是TINYINT(1)的同义词,TRUE和FALSE是1和0的同义词.

如果在编译器中完成转换,则应用程序的性能不会有任何差异.否则,差异仍然不明显.

您应该使用哪种方法可以更有效地编码,但不使用该功能可能会减少对特定"前端"供应商的依赖.

  • @MattZukowski,`TRUE`和`FALSE`是`1`和`0`的同义词,但反之则不然.`0`不是`FALSE`的同义词,`1`不是`TRUE`的同义词,这就是为什么`TRUE IS 1'会给出语法错误,但是`1 IS TRUE`不会. (19认同)
  • @MarcusAdams"同义词"是错误的词; "别名"更好 (7认同)
  • 这并不完全正确。“ TRUE”和“ FALSE”不一定与“ 1”和“ 0”等效。一方面,当与“ IS”运算符结合使用时,它们的行为有很大不同。例如,“ WHERE NOT(something IS 1)”将是语法错误,但是“ WHERE NOT(something IS TRUE)”有效。 (2认同)

Lau*_*nce 23

在mySQL中 - "TRUE"和"FALSE"是TINYINT(1)的同义词.

所以它基本上是一样的,但mySQL正在转换为0/1 - 所以如果你更容易使用TINYINT

ps性能可能是如此微不足道(如果有的话),如果你需要在StackOverflow上询问,那么它不会影响你的数据库:)


ZZ-*_*-bb 6

Bit如果tinyint你不喜欢,也是一个选择.一些链接:

毫不奇怪,手册中提供有关数字类型的更多信息.

还有一个链接:http://blog.mclaughlinsoftware.com/2010/02/26/mysql-boolean-data-type/

以及上述文章评论部分的引用:

  • TINYINT(1)不是bit(1)的同义词.
  • TINYINT(1)可以存储-9到9.
  • TINYINT(1)未签名:0-9
  • BIT(1):0,1.(比特,字面意思).

编辑:此编辑(和答案)仅与原始问题远程相关...

Justin Rovang和作者maclochlainn的其他引用(链接文章的评论部分).

对不起,似乎我已经成为了下属主义的牺牲品:TINYINT(1): - 128- + 127 TINYINT(1)未签名:0-255(Justin Rovang,11月25日下午4:32)

确实如此,但该帖子是关于PHPMyAdmin列为布尔值的内容,并且它仅在256种可能性的整个范围内使用0或1.(maclochlainn 8月25日晚11点35分)

  • @cnst查看编辑.整个答案与原始问题完全无关,但至少它提供了有关该主题的一些信息.BTW:简单的`select*from table_x`显示`tinyint(1)`列的整个值,即使它是一个两位或三位数字. (2认同)