JPA를 활용하여 생성한 프로젝트를 진행하는 중 로컬 DB(Windows)를 사용하는 경우 문제가 없었으나 서버 DB(Linux)를 사용하는 경우 테이블을 찾을 수 없다는 문제가 발생하였다.
테이블이 정상적으로 존재하는 것을 확인하였고 일단 급한대로 Entity들에 @Table(name =" ")을 추가해서 테이블 명과 직접 매핑시켜주었다. 추후 확인해보니 Entity명의 대/소문자가 데이터베이스와 일치하지 않아서 문제가 발생한다고 생각이 들어 찾아보게되었다.
https://www.lesstif.com/dbms/mysql-14745775.html
MySQL에서 테이블 사용 시 Windows에서는 대/소문자 구분이 안되는데 Linux나 Unix계열에서는 대/소문자 구분을 해야하는 이유는 바로 table과 database명이 directory와 file명이기 떄문이다.
Windows에서는 디렉토리와 파일에 접근할 때 대/소문자 구분을 하지 않으나 Linux, Unix는 구분하므로 테이블의 대/소문자를 구분하게 된다.
이를 설정을 통하여 변경할 수 있는데 우선 설정값은 DB에서 show variables like 'lower%'; 를 통하여 확인할 수 있다.
lower_case_table_names의 설정값은 아래와 같다.
0 | CREATE TABLE이나 CREATE DATABASE 실행 시 디스크에 저장되는 테이블과 데이터베이스의 이름을 대/소문자를 구분하여 생성한다. SELECT나 INSERT 사용 시에도 대/소문자를 구분해서 사용해야 한다. 대/소문자를 구별하는 OS 에서만 읨가 있고 Windows / MAC OS X 에는 적용되지 않는다. |
1 | 테이블과 DB 이름을 소문자로 생성하며 참조시에는 소문자로 변경하여 처리한다. 기존에 대문자가 포함되어 어 생성한 테이블과 DB는 문제가 될 수 있다. |
2 | CREATE TABLE이나 CREATE DATABASE 실행 시 디스크에 저장되는 테이블과 데이터베이스의 이름을 대/소문자를 구분해서 생성한다. SELECT나 INSERT 등 참조 시에는 소문자로 변경한다. 대/소문자를 구분하지 않는 파일 시스템을 가진 OS(Windows / MAC OS X)에서만 작동한다. |
설정을 변경하기 위해선 my.cnf 파일에 아래 설정을 넣어주고 재기동해주어야 한다.
[mysqld]
lower_case_table_names = 원하는 설정값