65

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

4

4 回答 4

66

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

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

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

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

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

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

于 2012-06-01T14:50:52.917 回答
26

在MySQL中TRUEFALSE.TINYINT(1)

因此,它基本上是一样的,但 MySQL 正在转换为 0/1 - 所以只需使用 aTINYINT如果这对你来说更容易

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

于 2012-06-01T14:42:05.973 回答
7

Bittinyint如果不符合您的喜好,也是一种选择。几个链接:

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

另一个链接: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 的附加引用(链接文章的评论部分)。

对不起,似乎我已经成为 substr-ism 的受害者: TINYINT(1): -128-+127 TINYINT(1) UNSIGNED: 0-255 (Justin Rovang 2011 年 8 月 25 日下午 4:32)

确实如此,但这篇文章是关于 PHPMyAdmin 列为布尔值的,它只使用了 256 种可能性中的 0 或 1。(maclochlainn 2011 年 8 月 25 日晚上 11:35)

于 2012-06-01T15:00:12.973 回答
3

如果您喜欢性能,那么值得使用 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 提出一个 table 表结构是有用的——但这更多是长时间优化的可能性,当 table 已经充满了大量数据时。

于 2012-06-01T15:00:30.143 回答