> 데이터 베이스 > MySQL 튜토리얼 > PDO가 0이 주어졌을 때 비트(1) 열에 1을 삽입하는 이유는 무엇입니까?

PDO가 0이 주어졌을 때 비트(1) 열에 1을 삽입하는 이유는 무엇입니까?

DDD
풀어 주다: 2024-11-02 17:31:03
원래의
558명이 탐색했습니다.

Why does PDO insert 1 into a bit(1) column when given 0?

PDO 문 삽입 난제: 바이너리 필드 문제 이해

데이터베이스 상호 작용의 세계에서 PDO 준비된 문을 활용하는 것은 다음을 보장하는 일반적인 관행입니다. 데이터 보안 및 효율성. 그러나 bit(1)과 같은 이진 필드를 만나면 당황스러운 문제가 발생합니다. 이러한 필드에 값 0을 삽입하면 테이블에 알 수 없는 1이 나타나는 경우가 많습니다.

이 예외는 MySQL의 비트(1) 열 유형의 이진 특성에서 비롯됩니다. 숫자 유형으로 분류됨에도 불구하고 실제로는 바이너리 유형으로 동작하여 PDO와 같은 클라이언트 라이브러리와의 호환성 문제를 일으킵니다.

이 문제를 우회하려면 보다 안정적인 접근 방식은 열 유형을 TINYINT( 1). BIT(1) 및 TINYINT(1)는 모두 행당 전체 바이트의 저장 공간을 사용하지만 후자는 클라이언트 라이브러리와의 원활한 호환성을 보장합니다.

다양한 유형 힌트 및 수정자를 실험해 보면 긍정적인 결과를 얻을 수도 있습니다. 아래와 같이 PARAM_INT 유형 힌트로 TestBool 매개변수를 바인딩하도록 PDO 코드를 수정하는 것이 좋습니다.

$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();
로그인 후 복사

이와 같은 해결 방법으로 문제가 일시적으로 해결될 수 있지만 TINYINT(1)로 전환하는 것이 강력하다는 점을 기억하세요. 향후 호환성 문제를 방지하기 위해 권장됩니다.

위 내용은 PDO가 0이 주어졌을 때 비트(1) 열에 1을 삽입하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿