TRUE
a FALSE
jsou klíčová slova a neměla by být uvozována jako řetězce:
INSERT INTO first VALUES (NULL, 'G22', TRUE);
INSERT INTO first VALUES (NULL, 'G23', FALSE);
Když je uvedete jako řetězce, MySQL je přetypuje na jejich celočíselný ekvivalent (protože booleany jsou ve skutečnosti jen jednobajtové INT
v MySQL), což se pro jakýkoli nečíselný řetězec převádí na nulu. Získáte tak 0
pro obě hodnoty ve vaší tabulce.
Nečíselné řetězce přetypovány na nulu:
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 |
+------------------------+-------------------------+-------------------------+
Ale klíčová slova vrátí odpovídající INT
zastoupení:
mysql> SELECT TRUE, FALSE;
+------+-------+
| TRUE | FALSE |
+------+-------+
| 1 | 0 |
+------+-------+
Všimněte si také, že jsem vaše dvojité uvozovky nahradil jednoduchými uvozovkami, jako jsou standardnější přílohy řetězců SQL. Nakonec jsem nahradil vaše prázdné řetězce za id
s NULL
. Prázdný řetězec může způsobit varování.