TIP게시판

제목 mysql bigint 사용시 php에서 표현문제
글쓴이 변종원(웅파) 작성시각 2011/08/19 11:06:32
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 19141   RSS
자동증가해서 유니크한 값을 사용하는 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()로 처리를 해야합니다.

이 넘들 때문에 작업시간이 좀 딜레이됐네요. ㅋ
 다음글 자바스크립트 압축용 라이브러리 (1)
 이전글 개발환경을 들고 다니자! (4)

댓글

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