원인은 MYSQL버젼에 따른 INSERT 구문의 오류입니다.
INSERT INTO dev_Categories (owner, id, parent, name, priority, entries, entriesInLogin, label) VALUES (1, '', NULL, '123', 1, 0, 0, '123');
mysql TOOL로 문장을 실행시키니 아래와 같은 메세지자 나오는군요.
Out of range value adjusted for column 'id' at row 1
id값이 integer 형인데 '' char형태의 값이 들어가서 발생하는 오류 같군요.
이전에는 문제가 없었는데 왜그렇지?
자료를 찾았습니다.
로컬에서는 MYSQL 5.0.20에서 실행됩니다..
웹에서는 MUSQL 5.0.18이구요 버전상의 문제는 아닌것 같고
로컬의 my.ini설정에 아래와 같은 구문이 있더군요.
# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
아래와 같이 주석처리하고 MYSQL을 리스타트 하면 문제가 발생하지
않았습니다.
# sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
MYSQL.COM 들어가서 sql-mode 메뉴얼을 보니 데이터형을 비교해서 잘못들어온 데이터를
엄격히 관리함에 따라 integer로 정의되어 있는데 char값이 들어오니 오류가 발생
했겠죠. 설정할수 있는게 많네요.
보다 자세한 사항은 아래 URL을 참고하시구요.
http://dev.mysql.com/doc/refman/5.0/en/ … -mode.html
참고로
NO_AUTO_CREATE_USER
이구문이 들어 있어서 아래와 같은 사용자 생성 스크립트가 먹지를 않더라구요.
CREATE DATABASE multi;
GRANT ALL PRIVILEGES ON multi.* TO multi@localhost;
UPDATE user SET password = password('multi') WHERE user = 'multi';
flush privileges;
주석처리하고 나니 명령어가 실행이 되는군요.
ORACLE에서는 자료형을 따지니까 int형일때는 '를 입력하지 않고 null일때는
0으로 처리해서 자료를 넣었습니다. MYSQL에서는 소홀했는데 이제 점점더 까다로워
지네요^^
갑자기 PHP의 register_global 이 생각나네요 요즘은 off해놓고 코딩하는게 습관이
되었습니다.
버그라고 해야할지 셋팅상의 문제라고 해야할지^^
webthink (2006-04-23 00:33:07)에 의해 마지막으로 수정