TRUE
и FALSE
са ключови думи и не трябва да се цитират като низове:
INSERT INTO first VALUES (NULL, 'G22', TRUE);
INSERT INTO first VALUES (NULL, 'G23', FALSE);
Като ги цитира като низове, MySQL ще ги прехвърли към техния целочислен еквивалент (тъй като булевите числа са наистина само еднобайтови INT
в MySQL), което се превежда в нула за всеки нечислов низ. Така получавате 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
. Празният низ може да издаде предупреждение.