Mysql
 sql >> Database >  >> RDS >> Mysql

PDOstatement (MySQL):inserendo il valore 0 in un campo bit(1) si ottiene 1 scritto nella tabella

La colonna BIT è un tipo binario in mysql (sebbene sia documentato come tipo numerico - non è esattamente vero) e consiglio di evitarlo a causa di problemi con le librerie client (che il problema PDO dimostra). Ti risparmierai molti problemi se modifichi il tipo di colonna in TINYINT(1)

TINYINT(1) consumerà ovviamente l'intero byte di spazio di archiviazione per ogni riga, ma secondo mysql documenti lo farà anche BIT(1).

da:http://dev.mysql.com/doc /refman/5.1/en/requisiti-di-archiviazione.html

il requisito di archiviazione dei bit è:circa (M+7)/8 byte, il che suggerisce che anche la colonna BIT(M) è allineata ai byte.

Inoltre ho trovato questo:https://bugs.php.net/bug.php? id=50757

Quindi puoi verificare se il seguente codice funziona come previsto:

$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();

Puoi anche provare con suggerimenti di tipo diverso da PARAM_INT, tuttavia anche se lo fai funzionare ti consiglio di passare a TINYINT.