Declaración de DOP (MySQL): al insertar el valor 0 en un campo de bit (1), se escribe 1 en la tabla
Estoy usando un campo de bit (1) para almacenar valores booleanos y escribir en la tabla usando declaraciones preparadas para DOP.
Esta es la tabla de prueba:
<code>CREATE TABLE IF NOT EXISTS `test` ( `SomeText` varchar(255) NOT NULL, `TestBool` bit(1) NOT NULL DEFAULT b'0' ) ENGINE=MEMORY DEFAULT CHARSET=latin1; </code>
Este es el código de prueba:
<code>$pdo = new PDO("connection string etc") ; $statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (?,?)') ; $statement->execute(array("TEST",0)) ; </code>
Ejecutar ese código me da una fila con valor 1 en TestBool. Y lo mismo usando bindValue () y bindParm (). También probé marcadores de posición con nombre (en lugar de?) Con el mismo resultado.
Entonces intenté:
<code>$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES ("TEST",0)') ; $statement->execute() ; </code>
Que funcionó correctamente (TestBool tiene valor 0). Poner en el SQL directamente en MySQL también funciona.
Tenga en cuenta que insertar 1 siempre funciona.
Entonces, ¿por qué los marcadores de posición no pueden insertar el valor 0? (¿Y cómo lo hago realmente?)