TRUE en FALSE zijn trefwoorden en mogen niet als tekenreeksen worden aangehaald:
INSERT INTO first VALUES (NULL, 'G22', TRUE);
INSERT INTO first VALUES (NULL, 'G23', FALSE);
Door ze als strings te citeren, zal MySQL ze vervolgens casten naar hun integer-equivalent (aangezien booleans in feite slechts één byte zijn INT in MySQL), wat zich vertaalt in nul voor elke niet-numerieke tekenreeks. U krijgt dus 0 voor beide waarden in uw tabel.
Niet-numerieke tekenreeksen gecast naar nul:
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 |
+------------------------+-------------------------+-------------------------+
Maar de trefwoorden retourneren hun corresponderende INT vertegenwoordiging:
mysql> SELECT TRUE, FALSE;
+------+-------+
| TRUE | FALSE |
+------+-------+
| 1 | 0 |
+------+-------+
Merk ook op dat ik uw dubbele aanhalingstekens heb vervangen door enkele aanhalingstekens, net als meer standaard SQL-stringbijlagen. Tot slot heb ik je lege strings vervangen door id met NULL . De lege string kan een waarschuwing geven.