TRUE
và FALSE
là các từ khóa và không nên được trích dẫn dưới dạng chuỗi:
INSERT INTO first VALUES (NULL, 'G22', TRUE);
INSERT INTO first VALUES (NULL, 'G23', FALSE);
Bằng cách trích dẫn chúng dưới dạng chuỗi, MySQL sau đó sẽ truyền chúng sang số nguyên tương đương (vì boolean thực sự chỉ là một INT
một byte trong MySQL), được chuyển thành 0 đối với bất kỳ chuỗi không phải số nào. Do đó, bạn nhận được 0
cho cả hai giá trị trong bảng của bạn.
Các chuỗi không phải số được truyền đến 0:
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 |
+------------------------+-------------------------+-------------------------+
Nhưng các từ khóa trả về INT
tương ứng của chúng đại diện:
mysql> SELECT TRUE, FALSE;
+------+-------+
| TRUE | FALSE |
+------+-------+
| 1 | 0 |
+------+-------+
Cũng xin lưu ý rằng tôi đã thay thế các dấu ngoặc kép của bạn bằng các dấu ngoặc đơn như là các hộp bao chuỗi SQL tiêu chuẩn hơn. Cuối cùng, tôi đã thay thế các chuỗi trống của bạn cho id
với NULL
. Chuỗi trống có thể đưa ra cảnh báo.