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

PDOstatement (MySQL):indsættelse af værdi 0 i et bit(1) felt resulterer i 1 skrevet i tabel

BIT-kolonnen er en binær type i mysql (selvom den er dokumenteret som numerisk type - det er ikke præcist sandt), og jeg anbefaler at undgå det på grund af problemer med klientbiblioteker (hvilket PDO-problemet beviser). Du vil spare dig selv for mange problemer, hvis du ændrer kolonnetypen til TINYINT(1)

TINYINT(1) vil selvfølgelig forbruge fuld byte af lagerplads for hver række, men ifølge mysql docs vil BIT(1) også gøre det.

fra:http://dev.mysql.com/doc /refman/5.1/da/storage-requirements.html

bitlagringskravet er:ca. (M+7)/8 bytes, hvilket tyder på, at BIT(M)-kolonnen også er byte-justeret.

Jeg fandt også dette:https://bugs.php.net/bug.php? id=50757

Så du kan tjekke, om følgende kode fungerer, som du forventer:

$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 også prøve med andre typer tip end PARAM_INT, men selvom du får det til at virke, råder jeg dig til at skifte til TINYINT.



  1. SQL Dynamic ASC og DESC

  2. Mysql returnerende klausul tilsvarende

  3. Sådan konverteres talformat af en beregnet kolonne til tidsformat (tt:mm:ss), sql-forespørgsel

  4. Vil du tilføje Auto-Increment ID til eksisterende tabel?