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

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

Patricia Arquette
Lepaskan: 2024-11-03 05:42:02
asal
923 orang telah melayarinya

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)) ;
Salin selepas log masuk

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();
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan