將0 插入MySQL BIT(1) 欄位結果為1:問題與解決方案
嘗試將0 值插入到使用PDO 準備語句的MySQL 中的BIT(1) 欄位意外地導致值1 寫入表中。儘管使用各種形式的參數綁定甚至原始 SQL,但僅在插入值 0 時才會出現此行為。
為什麼佔位符因 0 插入而失敗
BIT 列MySQL 中是二進位類型,這可能會導致與 PDO 等客戶端程式庫的相容性問題。出現此問題的原因如下:
解:使用 TINYINT(1) 取代
要解決此問題,建議修改欄位類型從 BIT(1) 到 TINYINT(1)。這將確保為每一行分配一個字節,無論插入的值如何。 TINYINT(1) 也可以用於儲存布林值,消除了與 BIT 列的兼容性問題。
例如,以下程式碼應該可以正常運作:
$pdo = new PDO("connection string etc") ; $statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (?,?)') ; $statement->execute(array("TEST",0)) ;
如果您仍然想要使用BIT(1),您可以嘗試以下解決方法:
$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (:someText,:testBool)') ; $statement->bindValue(':someText', "TEST"); $statement->bindValue(':testBool', 0, PDO::PARAM_INT); $statement->execute();
但是,切換到TINYINT(1) 是首選解決方案,因為它在不同資料類型之間提供一致的行為,並確保與各種客戶端的兼容性圖書館。
以上是為什麼將 0 插入 MySQL BIT(1) 欄位會得到 1?的詳細內容。更多資訊請關注PHP中文網其他相關文章!