질문Q #8049
mysql bigint 사용시 php에서 표현문제
변종원(웅파)2011-08-19 11:06:32
자동증가해서 유니크한 값을 사용하는 id필드를 int형이 아닌 bigint로 사용했을 경우 다음과 같은 문제가 나타납니다.

실제 bigint 값 : 11010000000016

위 값에 +1을 하게되면 php에서는 1.101E+13 이렇게 표시를 합니다.

정상적으로 값을 표현하기 위해서는 sprintf("%.0f",$변수)

<?php

$board_id = '11010000000016'

$board_id = $board_id + 1;

echo $board_id."===".sprintf("%.0f",$board_id)

?>

결과 

1.101E+13===11010000000016

그리고 두번째 insert 할때  bigint형 id에 자동증가 값이 들어가고 codeigniter의 $this->db->insert_id()를 호출하면
bigint형으로 값을 못 가져오고 int형으로 가져옵니다.

<?php

//insert 액션후
$lid = $this->db->insert_id();
$last_id = big_last_id();
echo $lid."-----".$last_id;


function big_last_id()
    {
        $last_id_query = $this->db->query('select last_insert_id() as lst');
        $last_ids = $last_id_query->row();
        return $last_ids->lst;
    }
?>

결과

1768646720-----200100000000064
그래서 위와 같이 mysql 내부함수인 last_insert_id()로 처리를 해야합니다.

이 넘들 때문에 작업시간이 좀 딜레이됐네요. ㅋ
답변6
#1 들국화 2011-08-19 11:32:53
 아하.. 그렇쿤요... 좋은팁입니다.
혹시 unsigned int 는 문제 없겠죠?
저는 id가 40억 이면 될듯 해서.. ^^;
#2 변종원(웅파) 2011-08-19 13:53:49
 테스트는 못해봤지만 동일한 현상이 발생할 것 같습니다.
#3 이현석 2011-08-19 22:54:35
 아..저도 id 필드 bigint로 사용 중인데 팁 감사합니다.
#4 한대승(불의회상) 2011-08-29 15:06:51
좋은정보.. 캄사...
#5 들국화 2011-09-05 15:11:47
 $this->db->insert_id();
는 unsigned int 일때는 문제가 없네요. 잘 넘어 옵니다.
#6 eitetu 2011-09-05 15:43:26
int 최대값 넘어가면서 문재는 불거지죠...