DB명 Table명 대소문자 구분 처리하기 (대소문자 구분 OS에서만 가능)
MySQL에서 DB명과 Table명을 대소문자 구분이 필요 할 때가 있습니다.
(해당 기능은 OS의 자체에서 대소문자가 구분이 되는 OS에서만 지원됩니다.)
>> : Win/Mac OS X에는 적용이 안된다고하네요? 왜 Mac OS에서 안된다고 하는지는 테스트 못해봄.
>> (결과) Mac OS X에 설치된 테이블명은 대소문자 구분이 가능
(예: TestTable, 그러나 select * from testTABLE; 이명령도 처리됨)
출처: https://www.lesstif.com/pages/viewpage.action?pageId=14745775
MySQL 에서 database(Ex: testdb) 를 생성하면 다음 순서로 진행된다.
- my.cnf 에 설정된 datadir하위에 database 이름의 directory 생성
- 해당 database 내에 table 생성시 table명으로 파일이 생성된다.
예로 RHEL/CentOS 용으로 패키징된 MySQL 의 경우 datadir 은 /var/lib/mysql 가 되므로
/var/lib/mysql/testdb/ 디렉토리가 생기고 다음과 같은 테이블을 생성할 경우 /var/lib/mysql/testdb/test_tbl.frm 같이 tablename.frm 파일이 생성된다.
MySQL 에서 테이블 사용시 Windows 에서는 대소문자 구분이 안 되는데 Linux나 Un*x 계열에서는 대소문자 구분을 해야 하는 이유는 바로 table 과 database 명이 directory와 file 명이기 때문이다.
Windows 에서는 디렉토리와 파일에 접근할때 대소문자 구분을 하지 않으나 Linux/Unix 는 구분하므로 select 나 insert 시에 테이블의 대소문자를 구분하게 된다.
설정값은 다음과 같이 3가지로 (http://dev.mysql.com/doc/refman/5.5/en/identifier-case-sensitivity.html)
Value | Meaning |
---|---|
0 | SELECT 나 Insert 사용시에도 대소문자를 구분해서 사용해야 한다. 대소문자를 구별하는 OS 에서만 의미가 있고 Windows/Mac OS X 에는 적용되지 않는다 |
1 | 테이블과 DB 이름을 소문자로 생성하며 참조시에는 소문자로 변경하여 처리한다. 기존에 대문자가 포함되어 생성한 테이블과 DB 는 문제가 될 수 있다. |
2 | 참조시에는 소문자로 변경한다. 대소문자를 구분하지 않는 파일 시스템을 가진 OS(Mac OS X) 에서만 동작한다. |
현재 설정값은 다음 variable 을 확인하면 된다.
my.cnf 에 다음 옵션을 넣어주고 재구동하면 table name과 database name 을 소문자로 저장하고 찾을때 대소문자 구분을 하지 않으므로 SQL 문에서 table과 database 를 대소문자 구분없이 사용할 수 있다.
lower_case_table_names 를 1로 설정해도 기존에 생성한 데이타베이스와 테이블은 대소문자를
구분하므로 기존 테이블과 DB 의 이름을 변경해야 한다.
your_schema_name 에 DB 이름을 넣고 다음 쿼리를 수행하면 rename 구문을 만들어 준다. (http://stackoverflow.com/questions/1262258/mysql-case-sensitive-tables-conversion)