TRUE
und FALSE
sind Schlüsselwörter und sollten nicht als Strings in Anführungszeichen gesetzt werden:
INSERT INTO first VALUES (NULL, 'G22', TRUE);
INSERT INTO first VALUES (NULL, 'G23', FALSE);
Indem sie als Strings zitiert werden, wandelt MySQL sie in ihr ganzzahliges Äquivalent um (da boolesche Werte eigentlich nur ein Ein-Byte-INT
sind in MySQL), was für jede nicht numerische Zeichenfolge in Null übersetzt wird. Somit erhalten Sie 0
für beide Werte in Ihrer Tabelle.
Nicht-numerische Zeichenfolgen in Null umgewandelt:
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 |
+------------------------+-------------------------+-------------------------+
Aber die Schlüsselwörter geben ihren entsprechenden INT
zurück Darstellung:
mysql> SELECT TRUE, FALSE;
+------+-------+
| TRUE | FALSE |
+------+-------+
| 1 | 0 |
+------+-------+
Beachten Sie auch, dass ich Ihre doppelten Anführungszeichen durch einfache Anführungszeichen ersetzt habe, da es sich um Standard-SQL-String-Einschließungen handelt. Schließlich habe ich Ihre leeren Zeichenfolgen für id
ersetzt mit NULL
. Der leere String kann eine Warnung ausgeben.