TRUE
og FALSE
er nøgleord og bør ikke citeres som strenge:
INSERT INTO first VALUES (NULL, 'G22', TRUE);
INSERT INTO first VALUES (NULL, 'G23', FALSE);
Ved at citere dem som strenge, vil MySQL derefter caste dem til deres heltalsækvivalent (da booleaner i virkeligheden kun er en en-byte INT
i MySQL), som oversættes til nul for enhver ikke-numerisk streng. Således får du 0
for begge værdier i din tabel.
Ikke-numeriske strenge castet til 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 |
+------------------------+-------------------------+-------------------------+
Men søgeordene returnerer deres tilsvarende INT
repræsentation:
mysql> SELECT TRUE, FALSE;
+------+-------+
| TRUE | FALSE |
+------+-------+
| 1 | 0 |
+------+-------+
Bemærk også, at jeg har erstattet dine dobbelte anførselstegn med enkelte anførselstegn, ligesom mere standard SQL streng-indkapslinger. Endelig har jeg erstattet dine tomme strenge for id
med NULL
. Den tomme streng kan give en advarsel.