Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

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


A coluna BIT é um tipo binário no mysql (embora esteja documentado como tipo numérico - isso não é exatamente verdade) e aconselho a evitá-lo devido a problemas com bibliotecas de clientes (o que prova o problema do PDO). Você se poupará de muitos problemas se modificar o tipo de coluna para TINYINT(1)

TINYINT(1) obviamente consumirá bytes completos de armazenamento para cada linha, mas de acordo com a documentação do mysql, o BIT(1) também funcionará.

de:http://dev.mysql.com/doc /refman/5.1/en/storage-requirements.html

O requisito de armazenamento de bits é:aproximadamente (M+7)/8 bytes, o que sugere que a coluna BIT(M) também é alinhada por byte.

Também encontrei isto:https://bugs.php.net/bug.php? código=50757

Assim, você pode verificar se o código a seguir funciona conforme o esperado:
$pdo = new PDO("connection string etc") ;
$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (:someText,:testBool)') ;
$statement->bindValue(':someText', "TEST");
$statement->bindValue(':testBool', 0, PDO::PARAM_INT);
$statement->execute();

Você também pode tentar com dicas de tipo diferentes de PARAM_INT, mesmo que funcione, aconselho mudar para TINYINT.