Mysql
 sql >> Baza danych >  >> RDS >> Mysql

PDOstatement (MySQL):wstawienie wartości 0 do pola bit(1) daje w wyniku 1 w tabeli

Kolumna BIT jest typem binarnym w mysql (choć jest udokumentowana jako typ numeryczny - to nie do końca prawda) i radzę jej unikać ze względu na problemy z bibliotekami klienckimi (co dowodzi problem PDO). Zaoszczędzisz sobie wiele kłopotów, jeśli zmodyfikujesz typ kolumny na TINYINT(1)

TINYINT(1) oczywiście zużyje pełny bajt pamięci dla każdego wiersza, ale zgodnie z dokumentacją mysql BIT(1) też to zrobi.

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

Wymagania dotyczące przechowywania bitów to:około (M+7)/8 bajtów, co sugeruje, że kolumna BIT(M) jest również wyrównana do bajtów.

Znalazłem również to:https://bugs.php.net/bug.php? id=50757

Możesz więc sprawdzić, czy poniższy kod działa zgodnie z oczekiwaniami:

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

Możesz także spróbować z innymi wskazówkami dotyczącymi typów niż PARAM_INT, ale nawet jeśli to zadziała, radzę zmienić na 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. tomcat 7.0.42 pooling, hibernacja 4.2, rozwiązanie mysql rock solid autoreconnect

  2. Skopiuj bazę danych mysql ze zdalnego serwera na komputer lokalny

  3. Jaka jest różnica między typami ciągów VARCHAR(255) i TINYTEXT w MySQL?

  4. Następne/poprzednie identyfikatory MySQL (dowolna kolejność sortowania)

  5. Przechowywanie macierzy odległości w DB