TRUE
och FALSE
är nyckelord och bör inte citeras som strängar:
INSERT INTO first VALUES (NULL, 'G22', TRUE);
INSERT INTO first VALUES (NULL, 'G23', FALSE);
Genom att citera dem som strängar kommer MySQL sedan att casta dem till deras heltalsmotsvarighet (eftersom booleaner egentligen bara är en enbyte INT
i MySQL), vilket översätts till noll för alla icke-numeriska strängar. Således får du 0
för båda värdena i din tabell.
Icke-numeriska strängar kastas till noll:
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 |
+------------------------+-------------------------+-------------------------+
Men nyckelorden returnerar motsvarande INT
representation:
mysql> SELECT TRUE, FALSE;
+------+-------+
| TRUE | FALSE |
+------+-------+
| 1 | 0 |
+------+-------+
Notera också att jag har ersatt dina dubbla citattecken med enkla citattecken, precis som vanligare SQL-strängar. Äntligen har jag ersatt dina tomma strängar för id
med NULL
. Den tomma strängen kan ge en varning.