sql >> Database >  >> RDS >> Mysql

PDOstatement (MySQL):het invoegen van waarde 0 in een bit(1)-veld resulteert in 1 geschreven in tabel

BIT-kolom is een binair type in mysql (hoewel het is gedocumenteerd als numeriek type - dat is niet precies waar) en ik adviseer om het te vermijden vanwege problemen met clientbibliotheken (wat PDO-probleem bewijst). U bespaart uzelf een hoop moeite als u het type kolom wijzigt in TINYINT(1)

TINYINT(1) zal natuurlijk de volledige byte aan opslagruimte verbruiken voor elke rij, maar volgens mysql docs zal BIT(1) het ook doen.

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

vereiste bitopslag is:ongeveer (M+7)/8 bytes, wat suggereert dat de BIT(M)-kolom ook byte-uitgelijnd is.

Ook vond ik dit:https://bugs.php.net/bug.php? id=50757

U kunt dus controleren of de volgende code werkt zoals u verwacht:

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

Je kunt het ook proberen met andere type hints dan PARAM_INT, maar zelfs als je het laat werken, raad ik aan om over te schakelen naar TINYINT.



  1. Tel hoeveel er in een een-op-veel-relatie bestaan

  2. selecteer max en min waarden elke x aantal rijen-postgresql

  3. Gebruiker met toekenningsoptie kan geen gebruiker aanmaken

  4. MYSQL REGEXP zoeken in JSON-tekenreeks