Mysql
 sql >> база данни >  >> RDS >> Mysql

PDOstatement (MySQL):вмъкването на стойност 0 в поле bit(1) води до 1, записано в таблицата

Колоната BIT е двоичен тип в mysql (въпреки че е документиран като числов тип - това не е съвсем вярно) и съветвам да го избягвате поради проблеми с клиентските библиотеки (което проблемът с PDO доказва). Ще си спестите много проблеми, ако промените типа на колоната на TINYINT(1)

TINYINT(1) разбира се ще консумира пълен байт място за съхранение за всеки ред, но според mysql docs BIT(1) също ще направи.

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

изискването за битово съхранение е:приблизително (M+7)/8 байта, което предполага, че колоната BIT(M) също е подравнена по байтове.

Също така намерих това:https://bugs.php.net/bug.php? id=50757

Така че можете да проверите дали следният код работи както очаквате:

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

Можете също така да опитате с различни типове подсказки от PARAM_INT, но дори и да работи, съветвам ви да промените на TINYINT.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysqli подготвено изявление - не актуализирайте NULL стойности

  2. Дата и час в PHP скрипт

  3. Грешка в .Net MySql. Даденият ключ не присъства в речника

  4. Rails:mysql и postgres едновременно в едно и също приложение?

  5. Сериозни ударения вместо '' в mysqli_query