MySQL 5.6에서 Invalid value 등의 에러 해결법
해결법이라고 쓰긴 하지만 이렇게 해결을 해도 되는 것인지 모르겠다. 뭔가 이유가 있어서 그렇게 기능으 넣어뒀을텐데 말이다. 어제 회사에서 배포 중인 게시판 솔루션이 APM 최신 버전에서 설치가 안된다는 내용을 보고 급하게 내부 테스트 서버 설정하고 테스트를 해봤는데.. MySQL 5.6.6이상에서 솔루션 설치는 물론 어떻게 설치를 했다고 하더라도 설정 변경 등의 기본적인 작업도 불가능하다는 것을 알게 돼서 급하게 수정을 하게됐다.
결론부터 말하면 MySQL 5.6.6이상부터 sql_mode 가 설정이 되는데 이 값이 설정되어 있을 경우 NOT NULL로 지정된 필드에 등록, 수정 등의 쿼리에서 값을 넘겨주지 않으면 오류가 발생한다. 또 int타입 필드에 값으로 ”와 같은 빈 스트링값을 넘기게 되면 int 타입 값이 아니라고 오류를 뿜어낸다. 타입에 맞는 값을 넘겨줘야 하는 게 맞는데 예를 들어 체크박스같은 경우는 체크를 하지 않으면 값이 넘어가지 않는데 이런 걸 다 체크해서 0으로 만들어 주는 건 쉽지 않은 일이다.
하물며 거의 개발이 완료된 상태에서 이거하나 때문에 코드 전체를 다 고치는 것은 정말 하고 싶지 않은 일이다.
참고글 : http://dev.mysql.com/doc/refman/5.6/en/server-sql-mode.html
위 레퍼런스 문서를 보게 되면 sql_mode 값을 설정하지 않으면 이전 방법대로 사용할 수 있다고 한다. 그래서 아래의 쿼리를 DB에 연결하자 마자 실행시켜주면 서버 전체의 설정을 변경하지 않고도 MySQL 5.6에서 이전의 방법처럼 사용할 수 있게 된다.
<?php
mysql_query("SET SESSION sql_mode = ''");
?>
PHP를 이용한 솔루션이기 때문에 위와 같이 쿼리를 실행했다. 이렇게 쿼리를 실행시키고 난 후 술루션 설치는 물론 환결설정, 게시글 작성 등의 기본적인 사용이 가능해졌다. 그리고 위 레퍼런스 문서를 보면 my.cnf 파일을 수정해서 서버 전체 설정을 변경해줘도 된다고 한다.