TRUE和FALSE是关键字,不应该被引用为字符串:
INSERT INTO first VALUES (NULL, 'G22', TRUE);
INSERT INTO first VALUES (NULL, 'G23', FALSE);
通过将它们引用为字符串,MySQL将会将它们转换为整数等价物(因为布尔确实只是MySQL中的一个字节的INT),对于任何非数字字符串,它将转换为零。因此,您的表中的值都为0。
非数字字符串转换为零:
mysql> SELECT CAST('TRUE' AS SIGNED), CAST('FALSE' AS SIGNED), CAST('12345' AS SIGNED);
+------------------------+-------------------------+-------------------------+
| CAST('TRUE' AS SIGNED) | CAST('FALSE' AS SIGNED) | CAST('12345' AS SIGNED) |
+------------------------+-------------------------+-------------------------+
| 0 | 0 | 12345 |
+------------------------+-------------------------+-------------------------+
但关键字返回相应的INT表示形式:
mysql> SELECT TRUE, FALSE;
+------+-------+
| TRUE | FALSE |
+------+-------+
| 1 | 0 |
+------+-------+
还要注意,我已经用单引号将双引号替换为更标准的SQL字符串外壳。最后,我已经将id的空字符串替换为NULL。空字符串可能会发出警告。