如何将BOOL值插入MySQL数据库

use*_*110 26 mysql

我试图BOOL使用以下脚本将值插入MySQL(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");
Run Code Online (Sandbox Code Playgroud)

但是 INSERT语句只是将0(零)插入两个TRUEFALSE选项的布尔列!你能告诉我为什么会这样吗?

Mic*_*ski 48

TRUE并且FALSE是关键字,不应该被引用为字符串:

INSERT INTO first VALUES (NULL, 'G22', TRUE);
INSERT INTO first VALUES (NULL, 'G23', FALSE);
Run Code Online (Sandbox Code Playgroud)

通过引用它们作为字符串,MySQL将它们转换为它们的整数等价物(因为布尔值实际上只是INTMySQL中的一个字节),对于任何非数字字符串,它都转换为零.因此,您可以获得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 |
+------------------------+-------------------------+-------------------------+
Run Code Online (Sandbox Code Playgroud)

但关键字返回其相应的INT表示:

mysql> SELECT TRUE, FALSE;
+------+-------+
| TRUE | FALSE |
+------+-------+
|    1 |     0 |
+------+-------+
Run Code Online (Sandbox Code Playgroud)

另请注意,我已将单引号替换为双引号,因为更多标准SQL字符串机箱.最后,我已经取代你的空字符串为idNULL.空字符串可能会发出警告.