真/假与mySQL中的0/1相比

True/False vs 0/1 in mySQL

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


一些启用了"使用布尔值"选项的"前端"将把所有tinyint(1)列视为布尔值,反之亦然。

这允许您在应用程序中使用true和false,而不是1和0。

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

MySQL中没有真正的BOOLEAN类型。Boolean只是tinyint(1)的同义词,true和false是1和0的同义词。

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

您应该使用任何一种方法来更有效地编码,尽管不使用该特性可能会减少对特定"前端"供应商的依赖。


在MySQL中,"true"和"false"是tinyint(1)的同义词。

因此,基本上是一样的,但是MySQL正在转换为0/1-所以,如果这对您来说更容易的话,就使用tinyint。

另外,性能可能非常小(如果有的话),如果您需要在stackoverflow上询问,那么它不会影响您的数据库:)


如果你不喜欢tinyintBit也是一种选择。几个环节:

  • 用于存储布尔值的mysql数据类型
  • 在MySQL中bit和tinyint有什么区别?

不足为奇,手册中提供了更多关于数字类型的信息。

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

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

  • TINYINT(1) isn’t a synonym for bit(1).
  • TINYINT(1) can store -9 to 9.
  • TINYINT(1) UNSIGNED: 0-9
  • BIT(1): 0, 1. (Bit, literally).

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

Justin Rovang和作者MacLochlainn(链接文章的评论部分)的附加引用。

Excuse me, seems I’ve fallen victim to substr-ism:
TINYINT(1): -128-+127
TINYINT(1) UNSIGNED: 0-255
(Justin Rovang 25 Aug 11 at 4:32 pm)

True enough, but the post was about what PHPMyAdmin listed as a Boolean, and there it only uses 0 or 1 from the entire wide range of 256 possibilities.
(maclochlainn 25 Aug 11 at 11:35 pm)


如果您对性能感兴趣,那么使用枚举类型是值得的。由于索引性能更好,在大表上可能更快。

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

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

但是,我总是这样解释这个问题:

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

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