sql >> Base de Datos >  >> RDS >> Mysql

PDOstatement (MySQL):insertar el valor 0 en un campo de bit (1) da como resultado 1 escrito en la tabla

La columna BIT es un tipo binario en mysql (aunque está documentado como tipo numérico, eso no es exactamente cierto) y aconsejo evitarlo debido a problemas con las bibliotecas cliente (lo que prueba el problema de PDO). Se ahorrará muchos problemas si modifica el tipo de columna a TINYINT(1)

TINYINT(1) por supuesto consumirá el byte completo de almacenamiento para cada fila, pero de acuerdo con los documentos de mysql, BIT(1) también lo hará.

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

el requisito de almacenamiento de bits es:aproximadamente (M+7)/8 bytes, lo que sugiere que la columna BIT(M) también está alineada con bytes.

También encontré esto:https://bugs.php.net/bug.php? id=50757

Por lo tanto, puede verificar si el siguiente código funciona como espera:

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

También puede probar con sugerencias de tipo diferentes a PARAM_INT, incluso si lo hace funcionar, le aconsejo cambiar a TINYINT.