我试图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(零)插入两个TRUE和FALSE选项的布尔列!你能告诉我为什么会这样吗?
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字符串机箱.最后,我已经取代你的空字符串为id用NULL.空字符串可能会发出警告.