Mysql
 sql >> Base de données >  >> RDS >> Mysql

PDOstatement (MySQL):l'insertion de la valeur 0 dans un champ bit(1) donne 1 écrit dans la table

La colonne BIT est un type binaire dans mysql (bien qu'elle soit documentée en tant que type numérique - ce n'est pas exactement vrai) et je conseille de l'éviter en raison de problèmes avec les bibliothèques clientes (ce que prouve le problème PDO). Vous vous épargnerez bien des soucis si vous modifiez le type de colonne en TINYINT(1)

TINYINT(1) consommera bien sûr un octet de stockage complet pour chaque ligne, mais selon la documentation mysql, BIT(1) fera également l'affaire.

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

l'exigence de stockage de bits est :environ (M+7)/8 octets, ce qui suggère que la colonne BIT(M) est également alignée sur les octets.

J'ai aussi trouvé ceci :https://bugs.php.net/bug.php ? id=50757

Vous pouvez donc vérifier si le code suivant fonctionne comme prévu :

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

Vous pouvez également essayer avec des indications de type différentes de PARAM_INT, même si vous le faites fonctionner, je vous conseille de passer à TINYINT.