Ответ 1
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
. Пустая строка может выдать предупреждение.