Rumah  >  Artikel  >  pangkalan data  >  Mengapa Memasukkan 0 ke dalam Medan MySQL BIT(1) Menghasilkan 1?

Mengapa Memasukkan 0 ke dalam Medan MySQL BIT(1) Menghasilkan 1?

Patricia Arquette
Patricia Arquetteasal
2024-11-03 05:42:02847semak imbas

Why Does Inserting 0 into a MySQL BIT(1) Field Result in 1?

Memasukkan 0 ke dalam Medan MySQL BIT(1) Keputusan dalam 1: Masalah dan Penyelesaian

Percubaan untuk memasukkan nilai 0 ke dalam Medan BIT(1) dalam MySQL menggunakan pernyataan PDO yang disediakan secara tidak dijangka mengakibatkan nilai 1 ditulis pada jadual. Tingkah laku ini berlaku walaupun menggunakan pelbagai bentuk pengikatan parameter dan juga SQL mentah, tetapi hanya apabila memasukkan nilai 0.

Mengapa Pemegang Tempat Gagal untuk 0 Sisipan

Lajur BIT dalam MySQL ialah jenis binari, yang mungkin menyebabkan masalah keserasian dengan perpustakaan pelanggan seperti PDO. Masalah timbul disebabkan oleh sebab berikut:

  • Lajur BIT diselaraskan bait, menggunakan bait penuh untuk setiap baris, tanpa mengira saiz yang ditentukan.
  • PDO salah mentafsir 0 nilai sebagai bit 1 disebabkan oleh isu penjajaran bait.

Penyelesaian: Gunakan TINYINT(1) Sebaliknya

Untuk menyelesaikan isu ini, adalah disyorkan untuk mengubah suai jenis lajur dari BIT(1) hingga TINYINT(1). Ini akan memastikan bahawa satu bait diperuntukkan untuk setiap baris, tanpa mengira nilai yang dimasukkan. TINYINT(1) juga boleh digunakan untuk menyimpan nilai boolean, menghapuskan isu keserasian dengan lajur BIT.

Sebagai contoh, kod berikut harus berfungsi dengan betul:

$pdo = new PDO("connection string etc") ;
$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (?,?)') ;
$statement->execute(array("TEST",0)) ;

Jika anda masih mahu untuk menggunakan BIT(1), anda boleh mencuba penyelesaian berikut:

$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (:someText,:testBool)') ;
$statement->bindValue(':someText', "TEST");
$statement->bindValue(':testBool', 0, PDO::PARAM_INT);
$statement->execute();

Walau bagaimanapun, bertukar kepada TINYINT(1) ialah penyelesaian pilihan kerana ia menyediakan tingkah laku yang konsisten merentas jenis data yang berbeza dan memastikan keserasian dengan pelbagai pelanggan perpustakaan.

Atas ialah kandungan terperinci Mengapa Memasukkan 0 ke dalam Medan MySQL BIT(1) Menghasilkan 1?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn