TRUE
e FALSE
sono parole chiave e non devono essere citate come stringhe:
INSERT INTO first VALUES (NULL, 'G22', TRUE);
INSERT INTO first VALUES (NULL, 'G23', FALSE);
Citandole come stringhe, MySQL le lancerà nel loro equivalente intero (poiché i booleani sono in realtà solo un INT
a un byte in MySQL), che si traduce in zero per qualsiasi stringa non numerica. Pertanto, ottieni 0
per entrambi i valori nella tabella.
Stringhe non numeriche convertite a 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 |
+------------------------+-------------------------+-------------------------+
Ma le parole chiave restituiscono il loro INT
corrispondente rappresentanza:
mysql> SELECT TRUE, FALSE;
+------+-------+
| TRUE | FALSE |
+------+-------+
| 1 | 0 |
+------+-------+
Nota anche che ho sostituito le tue virgolette doppie con virgolette singole come lo sono più contenitori di stringhe SQL standard. Infine, ho sostituito le tue stringhe vuote per id
con NULL
. La stringa vuota potrebbe emettere un avviso.