MySQL 数据库中哪个更快?布尔值,还是使用零和一来表示布尔值?我的前端只有一个是/否单选按钮。
4 回答
启用“使用布尔值”选项的某些“前端”会将所有 TINYINT(1) 列视为布尔值,反之亦然。
这允许您在应用程序中使用 TRUE 和 FALSE 而不是 1 和 0。
这根本不会影响数据库,因为它是在应用程序中实现的。
MySQL中没有真正的BOOLEAN
类型。BOOLEAN 只是 TINYINT(1) 的同义词,TRUE 和 FALSE 是 1 和 0 的同义词。
如果在编译器中完成转换,则应用程序的性能不会有任何差异。否则,差异仍然不会很明显。
您应该使用可以让您更有效地编码的任何方法,尽管不使用该功能可能会减少对特定“前端”供应商的依赖。
在MySQL中TRUE
和FALSE
是.TINYINT(1)
因此,它基本上是一样的,但 MySQL 正在转换为 0/1 - 所以只需使用 aTINYINT
如果这对你来说更容易
PS性能
可能
是如此微不足道(如果有的话),如果您需要在 StackOverflow 上询问,那么它不会影响您的数据库:)
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 的附加引用(链接文章的评论部分)。
对不起,似乎我已经成为 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)
如果您喜欢性能,那么值得使用 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 已经充满了大量数据时。