sql >> Databasteknik >  >> RDS >> Mysql

PDO-statement (MySQL):infogning av värde 0 i ett bit(1)-fält resulterar i 1 skrivet i tabell

BIT-kolumnen är en binär typ i mysql (även om den är dokumenterad som numerisk typ - det är inte exakt sant) och jag råder dig att undvika det på grund av problem med klientbibliotek (vilket PDO-problem bevisar). Du kommer att bespara dig själv mycket problem om du ändrar kolumntyp till TINYINT(1)

TINYINT(1) kommer naturligtvis att förbruka full byte av lagringsutrymme för varje rad, men enligt mysql docs kommer BIT(1) att göra det också.

från:http://dev.mysql.com/doc /refman/5.1/en/storage-requirements.html

bitlagringskravet är:ungefär (M+7)/8 byte, vilket tyder på att BIT(M)-kolumnen också är bytejusterad.

Jag hittade också detta:https://bugs.php.net/bug.php? id=50757

Så du kan kontrollera om följande kod fungerar som du förväntar dig:

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

Du kan också prova med andra typer av tips än PARAM_INT, men även om du får det att fungera rekommenderar jag att du byter till TINYINT.



  1. Använd molnformationsmallar för att spinna upp MySQL-instanser på RDS

  2. Mysql-fel:#1247 - Referens "karma" stöds inte (hänvisning till gruppfunktion)

  3. Övervaka databaser och instanser via Activity Monitor | Felsökning av SQL Server-prestanda -2

  4. Sail.js flera anslutningar vid start