mysql 에서 table 이름 설정시 주의사항

프로그래밍/iBatis 2009. 12. 12. 21:39

ibatis 튜토리얼을 따라하던 중에 조금은 어이없는 에러를 발견하였다.
ibatis sqlMap 내에 정의된 쿼리 실행시 해당 테이블을 찾을 수 없다는 에러였다. 대소문자를 구별하여 넣었을 때는 정상적으로 동작하였다.
흠... 조금은 황당하기도 하고 왜 그런지는 아직 자세히 알아보지는 않았다.

만약에 db 에 테이블 이름이 Person 으로 생성되었다면 ibatis 쿼리에는 PERSON 으로 기입했을 시 에러가 떨어진다.




대소문자를 구분하여 ibatis 내에 Person 으로 테이블이름 수정시에는 정상적으로 동작된다.
필드 또한 테스트 했는데 필드에는 대소문자 구분없이 정상적으로 동작한다.
테이블 이름만 대소문자를 가리는듯 했다.

원인을 찾아본 결과 문제는 MySql 에 있었다. ubuntu 에 설치된 MySql 서버는 기본설정이 테이블의 이름을 대소문자를 가리도록 되어 있다.
따라서 MySql 내부에서는 person 테이블 이름과 Person 테이블 이름은 다른 테이블을 가리킨다고 생각한다.
이 문제를 해결하기 위해서는 MySql 의 내부 설정을 변경해 주면 된다.

/etc/mysql/my.cnf 파일 내에 [mysqld] 아래 lower_case_table_names=1 을 추가해 주면 된다.


처음 에러 발견시에는 ibatis 쪽 에러라고 생각했었다. 역시 문제를 해결하기 위해서는 생각의 전환이 필요하다.

참고로 기존에 테이블이 존재하는 상태에서 해당 설정을 추가했을때 기존(lower_case_table_names 설정 전의 생성된 테이블) 테이블에 접근할 수 없는
알 수 없는 문제가 발생했다. 해당 설정은 테이블 설정 전에 추가해 주는게 안전할 듯 하다.
: