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?)

Respuestas a la pregunta(4)

Su respuesta a la pregunta