Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

PDOstatement (MySQL):chèn giá trị 0 vào trường bit (1) kết quả là 1 được ghi trong bảng

Cột BIT là một kiểu nhị phân trong mysql (mặc dù nó được ghi là kiểu số - điều đó không chính xác) và tôi khuyên bạn nên tránh nó do các vấn đề với thư viện máy khách (mà vấn đề PDO đã chứng minh). Bạn sẽ gặp rất nhiều rắc rối nếu bạn sửa đổi loại cột thành TINYINT (1)

TINYINT (1) tất nhiên sẽ sử dụng toàn bộ byte bộ nhớ cho mỗi hàng, nhưng theo tài liệu mysql thì BIT (1) cũng sẽ làm như vậy.

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

yêu cầu lưu trữ bit là:khoảng (M + 7) / 8 byte, điều này cho thấy cột BIT (M) cũng được căn chỉnh theo byte.

Ngoài ra, tôi cũng tìm thấy điều này: https://bugs.php.net/bug.php? id =50757

Vì vậy, bạn có thể kiểm tra xem mã sau có hoạt động như bạn mong đợi hay không:

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

Bạn cũng có thể thử với các gợi ý loại khác với PARAM_INT, ngay cả khi bạn vẫn hoạt động, tôi khuyên bạn nên thay đổi thành 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. Chèn một id cụ thể vào trường tăng dần tự động trong MySQL với Entity Framework 5

  2. Lỗi bế tắc MySQL

  3. Thời gian truy vấn chèn InnoDB so với MyISAM

  4. làm thế nào để giảm thiểu truy vấn của tôi?

  5. mysqli_affected_rows () trả về -1 nhưng truy vấn hoạt động