본문 바로가기

MySQL

mysql 테이블 이름 lower_case_table_names 대소문자 변경

mysql 테이블 이름 대소문자 관련 옵션 설정


lower_case_table_names = 0  //  테이블 생성 및 조회 시 대·소문자 구분한다.

lower_case_table_names = 1  //  입력 값이 대·소문자든 소문자로 인식 소문자 인식 파일 생성

lower_case_table_names = 2  //  윈도우에서 대·소문자를 구분해서 테이블생성


리눅스와 유닉스의 경우 0, 윈도우의 경우 1, 맥키토시의 경우 2 가 기본 값임.


하나의 플랫폼 OS상에서만 MySQL을 사용한다면 lower_case_table_names 변수를 변경시킬 필요나 관심이 없겠지만 대소문자를 구분하는 OS간 호환을 염두에 두는 경우라면 lower_case_table_names 또는 테이블 등의 이름생성 시 대소문자에 대한 판단이 중요하다. 


예를 들어 

윈도우상에서 테이블명을 UserInfo 라고 생성한 경우 쿼리문에서 userinfo라 사용할 수 있지만 리눅스상에서는 UserInfo라고 대소문자를 구분하여 정확히 써줘야 한다. 



1. 리눅스(우분투)에 MySQL 설치 하고 테이블 생성 시 기본으로 대소문자를 구분한다.




2. 대소문자를 구분하지 않고 테이블 생성 할 때는 lower_case_table_names 옵션 변경


▶ my.cnf 파일을 열어서 아래 옵션을 추가한다.


sudo vi /etc/mysql/my.cnf


- [mysqld] 아래에 lower_case_table_names=1 을 추가 하고 저장한다. 


[mysqld]

lower_case_table_names = 1


▶ mysql 서버 재기동


sudo service mysql restart


▶ 변경 사항 다시 확인 해 본다. 


- mysql 로 로그인 해서 아래와 같이 쿼리해 본다. 

- 아래 화면을 보면 1로 변경 된 것을 볼 수 있다. 




3. 이젠 테이블명은 대소문자로 구분하지 않는다.  근데 이게 맞나 ?


- MS-SQL을 사용하는 경우 테이블명이 대소문자 구분하지 않아 Pascal Case를 사용하여 보기 좋게 했다. ( 단어의 첫문자를 대문자로 나머지는 소문자로 표현)


- MySQL의 경우 리눅스 환경에서는 대소문자를 구분하기 때문에 윈도우서버로의 이식성 등을 고려 하여 테이블명을 전부 소문자로  사용하는게 좋을 것 같기도 하다. 


※ 물론 옵션 값 lower_case_table_names 를 변경하는 것도 하나의 방법이다. 


4. 선택의 기로 


▶ 모든 시스템에서 lower_case_table_names=1로 설정

- show tables 또는 show database 를 이용하여 테이블 및 컬럼명 볼 경우 원래 의도한 대소문자의 형태를 참고할 수 없다.  소문자로 만들어 진다.   머 그럼 어때 편한데... 


▶ 리눅스에서 lower_case_table_names=1 윈도우에서 lower_case_table_names=2로 설정

- 윈도우에서 대소문자를 구분하여 프로그램 해야 한다.  엄청 불편할 듯


▶ 그냥 무조건 소문자로 쓴다. → 모든게 귀찮다. 내가 편해야 다른 사람도 편해진다. 



5. lower_case_table_names=1 로 설정한 경우 사례 확인


▶ 테이블명을 대소문자 섞어 만들어도 소문자로만 만들어진 것을 확인 할 수 있다. 

 조회쿼리문에서 테이블명을 대소문자 섞어 써도 조회되는 것을 확인 할 수 있다. 




※ 참고 http://www.mysqlkorea.co.kr/sub.html?mcode=develop&scode=01&m_no=21581&cat1=9&cat2=291&cat3=302&lang=k