Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL中的真/假与0/1_Mysql_Boolean - Fatal编程技术网

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,而不是

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

在MySQL中是TINYINT(1)的同义词

因此,这基本上是一样的,但是MySQL正在转换为0/1-所以如果你更容易的话,就使用
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请参见编辑。整个答案与原来的问题完全无关,但至少它提供了一些关于这个主题的信息。顺便说一句:simple
select*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';