boolean 在 MySQL 中不是一个独特的数据类型;它只是tinyint 的同义词。 See this page in the MySQL manual。
请参阅下面来自dev.mysql.com/doc/的引用和示例
BOOL, BOOLEAN 这些类型是 TINYINT(1) 的同义词。零值
被认为是错误的。非零值被认为是真的:
mysql> SELECT IF(0, 'true', 'false');
+------------------------+
| IF(0, 'true', 'false') |
+------------------------+
| false |
+------------------------+
mysql> SELECT IF(1, 'true', 'false');
+------------------------+
| IF(1, 'true', 'false') |
+------------------------+
| true |
+------------------------+
mysql> SELECT IF(2, 'true', 'false');
+------------------------+
| IF(2, 'true', 'false') |
+------------------------+
| true |
+------------------------+
但是,TRUE 和 FALSE 值分别只是 1 和 0 的别名,如下所示:
mysql> SELECT IF(0 = FALSE, 'true', 'false');
+--------------------------------+
| IF(0 = FALSE, 'true', 'false') |
+--------------------------------+
| true |
+--------------------------------+
mysql> SELECT IF(1 = TRUE, 'true', 'false');
+-------------------------------+
| IF(1 = TRUE, 'true', 'false') |
+-------------------------------+
| true |
+-------------------------------+
mysql> SELECT IF(2 = TRUE, 'true', 'false');
+-------------------------------+
| IF(2 = TRUE, 'true', 'false') |
+-------------------------------+
| false |
+-------------------------------+
mysql> SELECT IF(2 = FALSE, 'true', 'false');
+--------------------------------+
| IF(2 = FALSE, 'true', 'false') |
+--------------------------------+
| false |
+--------------------------------+
最后两个语句显示显示的结果,因为 2 等于
既不是 1 也不是 0。
我个人建议使用 tinyint 作为首选项,因为 boolean 不会像您从名称中认为的那样做,因此它会产生潜在的误导性代码。但在实际层面上,这并不重要——它们都做同样的事情,所以你不会通过使用任何一个来获得或失去任何东西。