TRUE
dan FALSE
adalah kata kunci, dan tidak boleh dikutip sebagai string:
INSERT INTO first VALUES (NULL, 'G22', TRUE);
INSERT INTO first VALUES (NULL, 'G23', FALSE);
Dengan mengutipnya sebagai string, MySQL kemudian akan mentransmisikannya ke bilangan bulat yang setara (karena boolean sebenarnya hanya satu byte INT
di MySQL), yang diterjemahkan menjadi nol untuk string non-numerik apa pun. Dengan demikian, Anda mendapatkan 0
untuk kedua nilai di tabel Anda.
String non-numerik dilemparkan ke nol:
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 |
+------------------------+-------------------------+-------------------------+
Tetapi kata kunci mengembalikan INT
yang sesuai representasi:
mysql> SELECT TRUE, FALSE;
+------+-------+
| TRUE | FALSE |
+------+-------+
| 1 | 0 |
+------+-------+
Perhatikan juga, bahwa saya telah mengganti tanda kutip ganda Anda dengan tanda kutip tunggal seperti halnya lampiran string SQL yang lebih standar. Akhirnya, saya telah mengganti string kosong Anda untuk id
dengan NULL
. String kosong dapat mengeluarkan peringatan.