Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PDO-Anweisung (MySQL):Das Einfügen des Werts 0 in ein Bit(1)-Feld führt dazu, dass 1 in die Tabelle geschrieben wird

Die BIT-Spalte ist ein binärer Typ in MySQL (obwohl sie als numerischer Typ dokumentiert ist - das ist nicht ganz richtig) und ich rate, sie aufgrund von Problemen mit Client-Bibliotheken zu vermeiden (was das PDO-Problem beweist). Sie ersparen sich viel Ärger, wenn Sie den Spaltentyp auf TINYINT(1)

ändern

TINYINT(1) verbraucht natürlich für jede Zeile ein volles Byte an Speicherplatz, aber laut mysql-Dokumentation reicht BIT(1) auch aus.

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

Bit-Speicherbedarf ist:ungefähr (M+7)/8 Bytes, was darauf hindeutet, dass die BIT(M)-Spalte auch Byte-ausgerichtet ist.

Außerdem habe ich das gefunden:https://bugs.php.net/bug.php? id=50757

Sie können also überprüfen, ob der folgende Code wie erwartet funktioniert:

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

Sie können es auch mit anderen Typhinweisen als PARAM_INT versuchen, aber selbst wenn es funktioniert, empfehle ich, zu TINYINT zu wechseln.