MySQL 没有布尔数据类型。它使用 tinyint 代替。它无法使用 t 或 f 来表示该类型。
mysql> create table foo( boolboa BOOLEAN DEFAULT false );
Query OK, 0 rows affected (0,26 sec)
mysql> describe foo;
+---------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+------------+------+-----+---------+-------+
| boolboa | tinyint(1) | YES | | 0 | |
+---------+------------+------+-----+---------+-------+
1 row in set (0,01 sec)
mysql> insert into foo values(true);
Query OK, 1 row affected (0,05 sec)
mysql> insert into foo values('4');
Query OK, 1 row affected (0,05 sec)
mysql> insert into foo values(4);
Query OK, 1 row affected (0,02 sec)
mysql> select * from foo;
+---------+
| boolboa |
+---------+
| 1 |
| 4 |
| 4 |
+---------+
3 rows in set (0,00 sec)
来自 MySQL 文档。
布尔值,布尔值
这些类型是TINYINT(1) 的同义词。零值被认为是错误的。非零值被认为是真的:
还有更多疯狂的部分
mysql> select * from foo where boolboa = true;
+---------+
| boolboa |
+---------+
| 1 |
+---------+
1 row in set (0,00 sec)
mysql> select * from foo where boolboa != false;
+---------+
| boolboa |
+---------+
| 1 |
| 4 |
| 4 |
+---------+
3 rows in set (0,00 sec)
mysql> select not false is true;
+-------------------+
| not false is true |
+-------------------+
| 1 |
+-------------------+
mysql> select (not false is true) = true;
+----------------------------+
| (not false is true) = true |
+----------------------------+
| 1 |
+----------------------------+
在我运行下面的查询之前,我担心 MySQL 会返回“90% 1, 10% 0”。谢天谢地,它没有-))
mysql> select true != false;
+---------------+
| true != false |
+---------------+
| 1 |
+---------------+
1 row in set (0,00 sec)
结论:
MySQL 引擎本身甚至不知道什么是真,什么不是假,什么应该被视为非零,非零是什么意思等等。所以不要期望在这个问题上有太多的一致性 -))