TRUE
y FALSE
son palabras clave y no deben citarse como cadenas:
INSERT INTO first VALUES (NULL, 'G22', TRUE);
INSERT INTO first VALUES (NULL, 'G23', FALSE);
Al citarlos como cadenas, MySQL los convertirá en su equivalente entero (ya que los valores booleanos son en realidad un INT
de un byte). en MySQL), que se traduce en cero para cualquier cadena no numérica. Por lo tanto, obtienes 0
para ambos valores en su tabla.
Cadenas no numéricas convertidas a cero:
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 |
+------------------------+-------------------------+-------------------------+
Pero las palabras clave devuelven su correspondiente INT
representación:
mysql> SELECT TRUE, FALSE;
+------+-------+
| TRUE | FALSE |
+------+-------+
| 1 | 0 |
+------+-------+
Tenga en cuenta también que he reemplazado sus comillas dobles con comillas simples, ya que son recintos de cadenas SQL más estándar. Finalmente, reemplacé sus cadenas vacías por id
con NULL
. La cadena vacía puede emitir una advertencia.