MySQL提供了2种方法来检查boolean列的真值,这些是column_variable = true和column_variable is true.我创建了一个表,插入了一些值并尝试了一些select语句.结果如下:
首先我创建了这个表:
mysql> create table bool_test (
-> id int unsigned not null auto_increment primary key,
-> flag boolean );
Query OK, 0 rows affected (0.13 sec)
Run Code Online (Sandbox Code Playgroud)
然后我插入了4行:
mysql> insert into bool_test(flag) values (true),(false),(9),(null);
mysql> select * from bool_test;
+----+------+
| id | flag |
+----+------+
| 1 | 1 |
| 2 | 0 |
| 3 | 9 |
| 4 | NULL |
Run Code Online (Sandbox Code Playgroud)
以下是select我在此表上触发的所有查询:
mysql> select * from bool_test where flag;
+----+------+
| id | flag |
+----+------+
| 1 | 1 |
| 3 | 9 |
+----+------+
2 rows in set (0.49 sec)
mysql> select * from bool_test where flag = true;
+----+------+
| id | flag |
+----+------+
| 1 | 1 |
+----+------+
1 row in set (0.02 sec)
mysql> select * from bool_test where flag is true;
+----+------+
| id | flag |
+----+------+
| 1 | 1 |
| 3 | 9 |
+----+------+
2 rows in set (0.04 sec)
mysql> select * from bool_test where flag = false;
+----+------+
| id | flag |
+----+------+
| 2 | 0 |
+----+------+
1 row in set (0.01 sec)
mysql> select * from bool_test where flag is false;
+----+------+
| id | flag |
+----+------+
| 2 | 0 |
+----+------+
1 row in set (0.00 sec)
mysql> select * from bool_test where !flag;
+----+------+
| id | flag |
+----+------+
| 2 | 0 |
+----+------+
1 row in set (0.00 sec)
mysql> select * from bool_test where not flag;
+----+------+
| id | flag |
+----+------+
| 2 | 0 |
+----+------+
1 row in set (0.00 sec)
mysql> select * from bool_test where flag != true;
+----+------+
| id | flag |
+----+------+
| 2 | 0 |
| 3 | 9 |
+----+------+
2 rows in set (0.00 sec)
mysql> select * from bool_test where flag is not true;
+----+------+
| id | flag |
+----+------+
| 2 | 0 |
| 4 | NULL |
+----+------+
2 rows in set (0.00 sec)
mysql> select * from bool_test where flag != false;
+----+------+
| id | flag |
+----+------+
| 1 | 1 |
| 3 | 9 |
+----+------+
2 rows in set (0.04 sec)
mysql> select * from bool_test where flag is not false;
+----+------+
| id | flag |
+----+------+
| 1 | 1 |
| 3 | 9 |
| 4 | NULL |
+----+------+
3 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
我的问题是:什么时候建议使用is/ is not什么时候建议使用=/ != with true/ false?哪一个与供应商无关?
Álv*_*lez 29
MySQL实际上在欺骗你.它根本没有布尔列类型:
BOOL,BOOLEAN这些类型是同义词
TINYINT(1).值为零被视为false.非零值被认为是真的:
此外,布尔文字不是这样的:
常量
TRUE并分别FALSE评估为1和0.
考虑到:
0或1在BOOLEAN我的结论是:
WHERE IS flag或只是WHERE flag因为=根本无法正常工作.哪一个,可能是一个偏好问题.编辑:如果跨平台是必须的,我会这样做:
WHERE flag=0
WHERE flag<>0
Run Code Online (Sandbox Code Playgroud)
我相信我们已经做了很多次.
Lee*_*ree 10
如果flag列被索引并且所有值都是 0 或 1,where flag = true则比where flag is true.
在我们的测试中,is true产生了“全表扫描”,耗时 1.121 秒,而= true使用“键查找”执行,仅耗时 0.167 秒。该表有大约 300 万行。
| 归档时间: |
|
| 查看次数: |
30898 次 |
| 最近记录: |