我正在尝试使用以下脚本将值插入MySQL中的BOOL
数据类型(v 5.5.20):
CREATE DATABASE DBTest;
USE DBTest;
DROP TABLE IF EXISTS first;
CREATE TABLE first (id INT AUTO_INCREMENT NOT NULL PRIMARY KEY , name VARCHAR(30) ,sale BOOL,);
INSERT INTO first VALUES ("", "G22","TRUE");
INSERT INTO first VALUES ("", "G23","FALSE");
但是INSERT
语句只是将0
(零)插入到TRUE
和FALSE
选项的布尔列中!能告诉我为什么会这样吗?
答案 0 :(得分:46)
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
。空字符串可能会发出警告。