MySQL BIT(1) 필드에 0을 삽입하면 1이 발생합니다: 문제 및 해결 방법
MySQL BIT(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)로 전환하는 것이 다양한 데이터 유형에 걸쳐 일관된 동작을 제공하고 다양한 클라이언트와의 호환성을 보장하므로 선호되는 솔루션입니다. 도서관.
위 내용은 MySQL BIT(1) 필드에 0을 삽입하면 1이 나오는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!