MySQL中的真/假与0/1
MySQL数据库中哪个更快?布尔值,还是使用零和一来表示布尔值?我的前端只有一个yes/no单选按钮。在MySQL中是TINYINT(1)的同义词 因此,这基本上是一样的,但是MySQL正在转换为0/1-所以如果你更容易的话,就使用MySQL中的真/假与0/1,mysql,boolean,Mysql,Boolean,MySQL数据库中哪个更快?布尔值,还是使用零和一来表示布尔值?我的前端只有一个yes/no单选按钮。在MySQL中是TINYINT(1)的同义词 因此,这基本上是一样的,但是MySQL正在转换为0/1-所以如果你更容易的话,就使用TINYINT p.S. 性能可能非常小(如果有的话),如果您需要询问StackOverflow,那么它不会影响您的数据库:)一些启用了“使用布尔值”选项的“前端”会将所有TINYINT(1)列视为布尔值,反之亦然 这允许您在应用程序中使用TRUE和FALSE,而不是
TINYINT
p.S.性能可能非常小(如果有的话),如果您需要询问StackOverflow,那么它不会影响您的数据库:)一些启用了“使用布尔值”选项的“前端”会将所有TINYINT(1)列视为布尔值,反之亦然 这允许您在应用程序中使用TRUE和FALSE,而不是1和0 这根本不会影响数据库,因为它是在应用程序中实现的 MySQL中没有真正的
BOOLEAN
类型。BOOLEAN只是TINYINT(1)的同义词,TRUE和FALSE是1和0的同义词
如果转换是在编译器中完成的,则应用程序的性能不会有任何差异。否则,差异仍然不会明显
尽管不使用该功能可能会减少对特定“前端”供应商的依赖,但您应该使用任何允许您更高效地编码的方法。
Bit
也是一个选项,如果您不喜欢tinyint
。几个链接:
- TINYINT(1)不是位(1)的同义词
- TINYINT(1)可以存储-9到9
- TINYINT(1)未签名:0-9
- 位(1):0,1。(比特,字面意思)
编辑:此编辑(和答案)仅与原始问题有远程关联 Justin Rovang和作者maclochlainn的补充引用(链接文章的评论部分) 对不起,我似乎成了次贷主义的受害者: 锡(1):-128-+127 TINYINT(1)未签名:0-255 (Justin Rovang 8月25日下午4:32) 没错,但这篇文章是关于PHPMyAdmin列出的布尔值,在这里它只使用了256种可能性中的0或1。 (maclochlainn 8月25日晚上11:35)
如果您对性能感兴趣,那么使用枚举类型是值得的。由于索引性能更好,在大型表上可能会更快 使用方法(来源:): 但是,我总是这样解释这个问题:
EXPLAIN SELECT * FROM shirts WHERE size='medium';
将告诉您有关查询的大量信息,并帮助您构建更好的表结构。
为此,让phpmyadmin提出一种表结构是很有用的,但这是一种长期优化的可能性,因为表中已经充满了大量数据。我在使用MySQL和MySqlDataReader For C#.NET时有一个相关的观察结果。当我创建BOOLEAN类型的列时,它将以TINYINT(1)结束,值在PHPMyAdmin中看起来像0s和1s。但是,当使用MySqlDataReader以编程方式选择时,返回的值是字符串“True”和“False”(精确大写)。这恰好与C#.NET的bool.Parse()配合使用,后者只接受字符串“True”和“False”。我猜MySqlDataReader是为了方便而特意这样构建的。请注意MySql现在有一个
BIT
类型。有关详细信息,请参阅。您使用的是/否单选按钮?!?复选框/勾选框有什么问题?您不正确;TINYINT(1)可以存储更多不同的值;(1)
限制仅影响这些值的显示方式。@cnst请参见编辑。整个答案与原来的问题完全无关,但至少它提供了一些关于这个主题的信息。顺便说一句:simpleselect*from table_x
显示tinyint(1)
列的整个值,即使它是两位或三位数字。这并不完全正确TRUE
和FALSE
不一定等同于1
和0
。首先,当与IS
操作符结合使用时,它们的行为非常不同。例如,WHERE NOT(something IS 1)
可能是语法错误,但WHERE NOT(something IS TRUE)
有效。@MattZukowski,TRUE
和FALSE
是1
和0
的同义词,但反之亦然0
不是FALSE
的同义词,1
也不是TRUE
的同义词,这就是为什么TRUE is 1
会出现语法错误,但1 is TRUE
不会出现语法错误的原因。@MarcusAdams“同义词”是错误的单词;“别名”更好
EXPLAIN SELECT * FROM shirts WHERE size='medium';