생계/MySQL2024. 11. 11. 19:28
반응형

MySQL에서 테이블 이름의 대소문자 구분은 lower_case_table_names 시스템 변수로 제어된다.

이 설정은 운영 체제에 따라 기본값이 다르며, 주의해야 할 점들이 있다. 

1. lower_case_table_names 옵션

 - 0: 테이블 이름을 대소문자 구분 ( Unix/Linux 기본값 )
 - 1: 테이블 이름을 소문자로 저장하고, 비교 시 대소문자 구분 안 함 ( Windows, macOS 기본값 )
 - 2: 테이블 이름을 지정한 대로 저장하지만 비교 시 소문자로 변환 (macOS에서 권장)

 

2. 운영 체제별 기본 설정

 Unix/Linux: 0 (대소문자 구분)
 Windows: 1 (대소문자 구분 안 함)
 macOS: 2 (저장은 지정한 대로, 비교는 소문자로)

 

3. 설정 방법

my.cnf 또는 my.ini 파일의 [mysqld] 섹션에 아래와 같이 추가

[mysqld]
lower_case_table_names=1


4. 주의점 및 고려사항

- MySQL 8.0부터는 데이터 디렉토리 초기화 후 이 값을 변경할 수 없다
- 일관성 유지: 모든 환경에서 동일한 설정을 사용하는 것이 좋다.
- 복제 고려: 복제 환경에서는 모든 서버가 동일한 설정을 사용한다.
- 이식성: 대소문자를 구분하지 않는 설정(1)이 가장 이식성이 좋다
- 기존 데이터와 충돌 고려 : 설정 변경 시 기존 테이블 이름과 충돌할 수 있어 주의가 필요.
- 성능 : 대소문자를 구분하지 않는 설정은 약간의 성능 저하 가능성.
- 파일 시스템 고려 : 대소문자를 구분하는 파일 시스템(unix/linux)에서는 0 또는 2 설정을 권장

처음 설계시 이를 고려하지 않고 개발을 진행하다가 나중에 문제가 되는 경우가 종종 발생한다. 

안전하고 일관된 운영을 위해서는 설계 단계에서 고려가 필요하며, 이미 운영 중인 시스템이라면 변경 시 주의가 필요하다.

반응형
Posted by 돌고래트레이너