DB/MySQL

[MariaDB] BIT 형 컬럼을 PHP에서 올바로 표시하기

채윤아빠 2016. 9. 6. 11:35
728x90
반응형



문제점 및 증상

  • MariaDB에서 BIT 형 컬럼을 정의하고, PHP에서 이 자료를 받아서 JSON 형태로 출력하는 형태로 개발
    CREATE TABLE `customer_group`
    (
        `group_seq` INT(11) NOT NULL AUTO_INCREMENT COMMENT '그룹번호',
        `customer_seq` INT(11) NOT NULL COMMENT '고객번호',
        `group_name` VARCHAR(100) NOT NULL COMMENT '그룹_이름' COLLATE 'utf8_unicode_ci',
        `reg_date` DATETIME NOT NULL COMMENT '등록일시',
        `default_group` BIT(1) NOT NULL COMMENT '그룹 종류 : 0 - 일반 그룹, 1 - 기본그룹',
    );
    
  • 다음과 같이 처리할 경우, 무조건 0으로 되어 버림
        $group[$i]['reg_date']            = $row[2];
        $group[$i]['default_group']        = (int)($row[3]);
        $group[$i]['order_seq']            = (int)($row[4]);
    

해결 방안

  • INT 형으로 형 변환을 하면 0으로 되어, 관련 자료를 검색하여 보았으나, 확실한 답이 없었음
  • 여러 자료를 찾던 중에 BIT 데이터 처리하는데 ord() 함수가 눈에 띄여 이를 사용하여 보았더니 해결됨
        $group[$i]['reg_date']            = $row[2];
        $group[$i]['default_group']        = ord($row[3]);
        $group[$i]['order_seq']            = (int)($row[4]);
    
  • MySQL이나 Maria에서는 BIT 등도 일종의 문자열로 인식하여 실제 숫자에 해당하는 문자열이 아닌 경우 숫자로 변환되지 않는 것으로 보임


PHP에 MariaDB에 대한 client module이 아니라, MySQL용 모듈이 설치되어 있어서 발생한 문제였다.

php5-mysql client module이 설치되어 있다면, 해당 모듈을 삭제하고, php5-mysqlnd 모듈을 재설치하면 ord() 함수를 사용하지 않아도 올바로 숫자로 인식하게 된다. 아래 글을 참고로 해결하면 된다.


[MariaDB] BIT 형 컬럼을 PHP에서 올바로 표시하기