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

时间:2012-06-01 14:40:00

标签: mysql

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

4 个答案:

答案 0 :(得分:48)

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

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

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

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

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

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

答案 1 :(得分:21)

在mySQL中 - " TRUE"和"错误"是TINYINT(1)的同义词。

因此它的基本相同,但mySQL正在转换为0/1 - 所以如果你更容易使用TINYINT

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

答案 2 :(得分:6)

如果Bit不符合您的喜好,

tinyint也是一种选择。一些链接:

毫不奇怪,有关数字类型的更多信息可用in the manual

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

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

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

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

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

  

对不起,我觉得自己已经成为了副主义的受害者:   TINYINT(1): - 128- + 127   TINYINT(1)未签名:0-255   (Justin Rovang,8月25日,下午4:32)

     

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

答案 3 :(得分:2)

如果您正在表演,那么值得使用ENUM类型。由于索引性能更好,大表可能会更快。

使用它的方式(来源:http://dev.mysql.com/doc/refman/5.5/en/enum.html):

CREATE TABLE shirts (
    name VARCHAR(40),
    size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
);

但是,我总是说解释这样的查询:

EXPLAIN SELECT * FROM shirts WHERE size='medium';

将告诉您有关查询的大量信息,并帮助您构建更好的表结构。 为此,让phpmyadmin建议一个表表结构是有用的 - 但是当表已经填充了大量数据时,这是一个很长时间的优化可能性。