Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

PDOstatement (MySQL):memasukkan nilai 0 ke dalam bidang bit(1) menghasilkan 1 yang ditulis dalam tabel

Kolom BIT adalah tipe biner di mysql (meskipun didokumentasikan sebagai tipe numerik - itu tidak sepenuhnya benar) dan saya menyarankan untuk menghindarinya karena masalah dengan pustaka klien (yang dibuktikan oleh masalah PDO). Anda akan terhindar dari banyak masalah jika Anda mengubah jenis kolom menjadi TINYINT(1)

TINYINT(1) tentu saja akan menggunakan penyimpanan byte penuh untuk setiap baris, tetapi menurut dokumen mysql, BIT(1) juga akan digunakan.

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

persyaratan penyimpanan bit adalah:kira-kira (M+7)/8 byte yang menunjukkan bahwa kolom BIT(M) juga selaras dengan byte.

Saya juga menemukan ini:https://bugs.php.net/bug.php? id=50757

Jadi Anda dapat memeriksa apakah kode berikut berfungsi seperti yang Anda harapkan:

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

Anda juga dapat mencoba dengan petunjuk jenis yang berbeda dari PARAM_INT, meskipun Anda berhasil, saya sarankan untuk mengubah ke 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. Cara mengkonfigurasi Tomcat untuk terhubung dengan MySQL

  2. Mendapatkan Id yang Terakhir Dimasukkan Dari MySQL di Yii

  3. Kelompokkan, Urutkan, dan Hitung dalam satu kueri

  4. Pilih semua baris kecuali satu di MySQL

  5. Buat kueri untuk mendapatkan jumlah panggilan yang belum selesai