MySQL의 테이블 이름은 대소 문자를 구분합니까?


173

MySQL의 테이블 이름은 대소 문자를 구분합니까?

내 Windows 개발 컴퓨터에서 내가 가지고있는 코드는 모두 소문자로 보이는 테이블을 쿼리 할 수 ​​있습니다. 데이터 센터의 테스트 서버에 배포하면 테이블 이름이 대문자로 시작하는 것으로 나타납니다.

우리가 사용하는 서버는 모두 우분투에 있습니다.


답변:


203

일반적으로 :

데이터베이스 및 테이블 이름은 Windows에서 대소 문자를 구분하지 않으며 대부분의 Unix 품종에서는 대소 문자를 구분합니다.

MySQL에서 데이터베이스는 데이터 디렉토리 내의 디렉토리에 해당합니다. 데이터베이스 내의 각 테이블은 데이터베이스 디렉토리 내의 하나 이상의 파일에 해당합니다. 결과적으로 기본 운영 체제의 대소 문자 구분은 데이터베이스 및 테이블 이름의 대소 문자 구분에 영향을줍니다.

시스템 변수 lower_case_table_names( [mysqld] 의 my.cnf 구성 파일 에서)를 사용하여 디스크에 테이블 이름을 저장하는 방법을 구성 할 수 있습니다 .

자세한 정보는 10.2.2 식별자 대소 문자 구분 섹션을 읽으십시오 .


40
내 코드가 로컬 Windows 환경에서 훌륭하게 작동했지만 Linux에서 프로덕션으로 옮길 때 예외가 발생하면서 이것은 완전히 나를 태워 버렸습니다! 감사!
portforwardpodcast 2019

6
이 문서에 언급되지 않은이 답변에 하나의 경고입니다 : 이노은 데이터베이스와 테이블의 파일이나 디렉토리 이름을 사용하지 않고는, 따라서 객체는 항상 케이스에 민감한 시스템에서 실행되는 경우에도, 사례를 구분. 이로 인해 무엇이 잘못 될 수 있는지에 대한 예는 다음 질문을 참조하십시오. stackoverflow.com/questions/23182969/…
Jules

이것은 전체 이야기가 아닙니다. 구성 가능한 StephenLembert의 답변 참조
Chris Wood

1
기본적으로 대부분의 Mac 컴퓨터는 대소 문자를 구분하지 않는 파일 시스템을 사용합니다. 그러나 파일 시스템이 대소 문자를 구분하도록 선택할 수 있습니다.
차드

이것과 파일 이름 대소 문자 구분은 웹 개발자로 우분투로 이주한 이유 중 하나입니다.
Muhammad bin Yusrat

99

데이터베이스 및 테이블 이름은 Windows에서 대소 문자를 구분하지 않으며 대부분의 Unix 또는 Linux에서는 대소 문자를 구분합니다.

문제를 해결하려면 lower_case_table_names를 1로 설정하십시오.

lower_case_table_names = 1

이렇게하면 테이블 작성 방법에 관계없이 모든 테이블을 소문자로 만듭니다.


1
기본 Unix와 달리 MacOS X에서도 대소 문자를 구분하지 않습니다. 이것은 Mac에서 MySQL 내에서 자동 완성이 쿼리가 아닌 경우에도 테이블 또는 필드 이름에 대해 대소 문자를 구분하는 이유 일 것입니다.
David

예,하지만이 진술을 하시겠습니까? [mysql] 그룹 아래의 /etc/mysql/my.cnf에 있습니다. 그러나 이것으로 충분하지는 않지만 여전히 다른 일이 필요합니다 (물론 mysql을 다시 시작하는 것 외에도 ...
Alg_D

1
이것은 새 테이블에만 영향을줍니다. 이 설정을 변경하기 전에 기존 테이블의 이름을 소문자로 변경해야합니다.
Martin

19

MySQL의 테이블 이름은 파일 시스템 항목이므로 기본 파일 시스템 인 경우 대소 문자를 구분하지 않습니다.


3
나는 이것이 항상 InnoDB 테이블에 해당한다고 생각하지 않습니다.
Simon East

@SimonEast 그렇게 생각하는 이유를 말씀해 주시겠습니까?
Arya

16

lower_case_table_names시스템 변수에 따라 다릅니다 .

show variables where Variable_name='lower_case_table_names'

이에 대한 세 가지 가능한 값이 있습니다.

  • 0- CREATE TABLE또는 CREATE DATABASE명세서에 지정된 소문자 . 이름 비교는 대소 문자를 구분합니다.
  • 1 -테이블 이름은 디스크에서 소문자로 저장되며 이름 비교는 대소 문자를 구분하지 않습니다.
  • 2- CREATE TABLE또는 CREATE DATABASE문에 지정된 소문자이지만 MySQL은 조회시 소문자로 변환합니다. 이름 비교는 대소 문자를 구분하지 않습니다.

선적 서류 비치


11
  1. 에서 파일 찾기 /etc/mysql/my.cnf

  2. 다음 줄을 추가하여 파일을 편집하십시오.

    [mysqld]

    lower_case_table_names=1

  3. sudo /etc/init.d/mysql restart

  4. 실행하는 mysqladmin -u root -p variables | grep table것을 확인 할 수 lower_case_table_names있다1 지금

작동하려면이 테이블을 다시 작성해야 할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.