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.