sql >> Databáze >  >> RDS >> Mysql

PDOstatement (MySQL):vložení hodnoty 0 do pole bit(1) vede k zapsání 1 do tabulky

Sloupec BIT je binární typ v mysql (ačkoli je zdokumentován jako číselný typ - to není přesně pravda) a doporučuji se mu vyhnout kvůli problémům s klientskými knihovnami (což problém PDO dokazuje). Ušetříte si spoustu problémů, pokud upravíte typ sloupce na TINYINT(1)

TINYINT(1) samozřejmě spotřebuje celý bajt úložiště pro každý řádek, ale podle dokumentů mysql to zvládne i BIT(1).

from:http://dev.mysql.com/doc /refman/5.1/cs/storage-requirements.html

Požadavek na úložiště bitů je:přibližně (M+7)/8 bajtů, což naznačuje, že sloupec BIT(M) je také zarovnán podle bajtů.

Také jsem našel toto:https://bugs.php.net/bug.php? id=50757

Můžete tedy zkontrolovat, zda následující kód funguje tak, jak očekáváte:

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

Můžete také zkusit použít jiné typy tipů než PARAM_INT, i když to bude fungovat, doporučuji změnit na TINYINT.



  1. Jak naložím s remízou při hodnocení výsledků v MySQL?

  2. Tabulka v paměti v PostgreSQL

  3. Mohu přinutit Yii, aby používal konkrétní alias ve generovaném SQL

  4. SQL připojení pro mnoho řádků