如何将BOOL值插入MySQL数据库

时间:2012-11-06 21:23:52

标签: mysql

我正在尝试使用以下脚本将值插入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(零)插入到TRUEFALSE选项的布尔列中!能告诉我为什么会这样吗?

1 个答案:

答案 0 :(得分:46)

TRUEFALSE是关键字,不应引用为字符串:

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。空字符串可能会发出警告。