TIP게시판

제목 unsigned int 타입일 경우의 버그
글쓴이 도라에몽 작성시각 2011/03/30 17:39:29
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 14451   RSS
CREATE TABLE IF NOT EXISTS `aaa` (
  `idx` INT(11) NOT NULL AUTO_INCREMENT,
  `aa` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`idx`)
);

INSERT INTO aaa (aa) VALUES (-100);
SELECT * FROM aaa;

UPDATE aaa SET aa = aa -100 WHERE idx = 1;
SELECT * FROM aaa;
위의 코드 처럼 하면 두번째 select 할때 aa에 4294967295 이 들어갑니다.
mysql에 있는 버그 인듯 하구요..

mysql 5.5 버전에서는 패치가 됬는지.. insert할때는 에러없이 0으로 들어가지만
update 쿼리 실행할때 unsigned 라서 안된다는 에러 메세지가 뜨네요..

이전 버전을 사용 하시고 계신분들은 point, cash 같은 필드에 unsigned를 사용하시고 계시다면
unsigned를 빼시는것이 좋을듯 합니다.

옆에 계시는 차장님이 예전 웹하드 업체에서 일하실때 그런 해킹을 많이 당하셔서 알고 계시네요. ^^;
 다음글 문제가 될수 있는 부분하나 (CI 2.0) (2)
 이전글 SmartEditor 사용하기

댓글

변종원(웅파) / 2011/03/31 15:01:40 / 추천 0
미리 알았으면 이리저리 쑤셔봤을텐데요. ㅎㅎ
徽人 / 2011/04/01 10:41:58 / 추천 0
저도 첨에 되게 황당했었는데..

이렇게 해결햇었습니다.
UPDATE aaa SET aa = IF(-100 < 0, 0, -100) WHERE idx = 1;