TRUE
e FALSE
são palavras-chave e não devem ser citadas como strings:INSERT INTO first VALUES (NULL, 'G22', TRUE);
INSERT INTO first VALUES (NULL, 'G23', FALSE);
Ao citá-los como strings, o MySQL irá convertê-los para seu equivalente inteiro (já que booleanos são realmente apenas um
INT
de um byte no MySQL), que se traduz em zero para qualquer string não numérica. Assim, você obtém 0
para ambos os valores em sua tabela. Strings não numéricas convertidas em zero:
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 |
+------------------------+-------------------------+-------------------------+
Mas as palavras-chave retornam seu INT
correspondente representação:
mysql> SELECT TRUE, FALSE;
+------+-------+
| TRUE | FALSE |
+------+-------+
| 1 | 0 |
+------+-------+
Observe também que substituí suas aspas duplas por aspas simples, pois são mais invólucros de string SQL padrão. Por fim, substituí suas strings vazias por
id
com NULL
. A string vazia pode emitir um aviso.