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 설정을 권장
처음 설계시 이를 고려하지 않고 개발을 진행하다가 나중에 문제가 되는 경우가 종종 발생한다.
안전하고 일관된 운영을 위해서는 설계 단계에서 고려가 필요하며, 이미 운영 중인 시스템이라면 변경 시 주의가 필요하다.
'생계 > MySQL' 카테고리의 다른 글
| MYSQL 파라미터 innodb_read_only 와 read_only 차이 (0) | 2024.11.19 |
|---|---|
| mysql 테이블 복사하는 방법 CTAS 등 (0) | 2024.11.13 |
| mysql dump 및 load 수행하는 여러가지 방법 (0) | 2024.11.10 |
| mysql replication 상태 반복 체크 (0) | 2024.10.18 |
| innodb 사용시 pk 의 선정 (0) | 2024.09.22 |