PDOstatement (MySQL): inserir o valor 0 em um campo de bit (1) resulta em 1 escrito na tabela

Estou usando um campo bit (1) para armazenar valores booleanos e gravar na tabela usando instruções preparadas pelo PDO.

Esta é a tabela de testes:

<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 é o código de teste:

<code>$pdo = new PDO("connection string etc") ;
$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (?,?)') ;
$statement->execute(array("TEST",0)) ;
</code>

Executar esse código me fornece uma linha com valor 1 em TestBool. E a mesma coisa usando bindValue () e bindParm (). Eu também tentei espaços reservados nomeados (em vez de?) Com o mesmo resultado.

Então eu tentei:

<code>$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES ("TEST",0)') ;
$statement->execute() ;
</code>

Qual funcionou corretamente (TestBool tem valor 0). Punching no SQL diretamente no MySQL também funciona.

Note que inserir 1 sempre funciona.

Então, por que os espaços reservados não inserem o valor 0? (e como eu realmente faço isso?)

questionAnswers(4)

yourAnswerToTheQuestion