예전 개발DB가 Windows에서 돌아가고 있었고, 서버를 이전하면서 Linux계열에서 DB를 운용하게 되었다.
그런데 내가 만든 클라이언트 프로그램들에서 Table 검색이 되지 않는다고 메세지가 나오는게 아닌가..
원인은 현재도 그렇고, 습관적으로 나는 DB명과 Table명을 대문자로 기입한다.
Windows에서는 디렉토리와 파일에 접근할 때, 대소문자를 구분하지 않지만 Linux계열은 구분한다.
당시 Windows에서 실제 생성된 DB나 Linux로 이관된 DB에서 보면 모든 Table들이 소문자로 생성 되
있는데, Window 기반에서 대문자로 쿼리를 날려도 작동은 되지만 Linux계열은 대소문자를 구분하기 때문에
실제 생성된 문자와 일치하여야한다.
다행히, MySQL에서는 해당 이슈에 대한 해결방법이 레퍼런스로 제공되고 있다.
https://dev.mysql.com/doc/refman/5.5/en/identifier-case-sensitivity.html
현재 설정값 확인법
DB Client Tool에서 show variables like ‘lower_case_table_names’; 값 확인
value | meaing |
0 | CREATE TABLE 이나 CREATE DATABASE 실행시 디스크에 저장되는 테이블과 데이타베이스의 이름을 대소문자를 구분해서 생성한다.
SELECT 나 Insert 사용시에도 대소문자를 구분해서 사용해야 한다. 대소문자를 구별하는 OS 에서만 의미가 있고 Windows/Mac OS X 에 는 적용되지 않는다 |
1 | 테이블과 DB 이름을 소문자로 생성하며 참조시에는 소문자로 변경하여 처리한다. 기존에 대문자가 포함되어 생성한 테이블과 DB 는 문제가 될 수 있다. |
2 | CREATE TABLE 이나 CREATE DATABASE 실행시 디스크에 저장되는 테이블과 데이타베이스의 이름을 대소문자를 구분해서 생성한다.
참조시에는 소문자로 변경한다. 대소문자를 구분하지 않는 파일 시스템을 가진 OS(Mac OS X) 에서만 동작한다.
|
확인 해 보면 기본값이
Linux & Unix = 0,
Windows = 1,
MacOS = 2
로 설정 되 있는걸 확인 할 수 있다.
위 설정은 Windows 에서는 설치 디렉토리\my.inf 파일을 수정하면 되며,
Linux 에서는 /etc/my.cnf 파일을 다음과 같이 설정하면 된다.
* 시놀로지 NAS의 경우..
[mysqld]… 중략 …
lower_case_table_names = 1 <– 원하는 설정값
이후 DB 서비스 재시작하면 끝.