True/False vs 0/1 in mySQL
在MySQL数据库中哪个更快?布尔值,还是使用零和一来表示布尔值?我的前端只有一个"是/否"单选按钮。
一些启用了"使用布尔值"选项的"前端"将把所有tinyint(1)列视为布尔值,反之亦然。
这允许您在应用程序中使用true和false,而不是1和0。
这根本不影响数据库,因为它是在应用程序中实现的。
MySQL中没有真正的
如果转换是在编译器中完成的,那么应用程序的性能将不会有任何差异。否则,差异仍然不明显。
您应该使用任何一种方法来更有效地编码,尽管不使用该特性可能会减少对特定"前端"供应商的依赖。
在MySQL中,"true"和"false"是tinyint(1)的同义词。
因此,基本上是一样的,但是MySQL正在转换为0/1-所以,如果这对您来说更容易的话,就使用tinyint。
另外,性能可能非常小(如果有的话),如果您需要在stackoverflow上询问,那么它不会影响您的数据库:)
如果你不喜欢
- 用于存储布尔值的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 |
但是,我总是这样解释这个问题:
将告诉您有关查询的大量信息,并帮助您构建更好的表结构。为此,让phpmyadmin提出一个表-表结构是很有用的-但是当表中已经填充了大量数据时,这是一个较长时间的优化可能性。