Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 데이터베이스 및 테이블 이름은 대소문자를 구분할까?

MySQL 데이터베이스·테이블 이름의 대소문자 구분 여부

MySQL에서 데이터베이스와 테이블 이름의 대소문자 구분 여부는 MySQL 자체가 아니라 기반이 되는 운영체제의 파일 시스템에 따라 결정됩니다. MySQL은 데이터베이스와 테이블을 내부적으로 디렉터리와 파일 형태로 저장하기 때문입니다.

운영체제별 차이

  • Windows: 파일 시스템이 대소문자를 구분하지 않기 때문에, 데이터베이스 및 테이블 이름 역시 대소문자를 구분하지 않습니다.
  • 대부분의 Unix/Linux 계열: 파일 시스템이 대소문자를 구분하므로, 데이터베이스 및 테이블 이름도 대소문자를 구분합니다.
  • macOS: 기본 파일 시스템(APFS, HFS+)은 대소문자를 구분하지 않지만, 대소문자 구분 옵션으로 포맷된 볼륨에서는 구분합니다.

lower_case_table_names 시스템 변수

이러한 동작 방식은 MySQL의 lower_case_table_names 시스템 변수로 확인하고 제어할 수 있습니다.

  • 0: 이름을 입력한 그대로 저장하며, 비교 시 대소문자를 구분합니다. (Unix/Linux 기본값)
  • 1: 이름을 모두 소문자로 변환하여 저장하고, 비교 시에도 대소문자를 구분하지 않습니다. (Windows 기본값)
  • 2: 이름을 입력한 그대로 저장하지만, 비교 시에는 소문자로 변환하여 비교합니다. (macOS 기본값)

실무 팁과 주의 사항

lower_case_table_names 값은 서버 초기화 시점에 결정되며, 이후 변경하려면 스키마와 데이터를 다시 가져와야 하므로 신중하게 설정해야 합니다. 개발 환경(Windows)과 운영 환경(Unix/Linux)이 다른 경우 대소문자 처리 방식의 차이로 인해 오류가 발생할 수 있습니다.

따라서 서버 간 이식성을 고려한다면, 데이터베이스와 테이블 이름을 항상 소문자로 통일하여 생성하는 것이 가장 안전하고 권장되는 방법입니다.