2012-07-04 3 views
1

난 소문자로 내 MySQL의 테이블을 조회하려고 할 때 오류가 있습니다 (I이 오류가MySQL과 대소 문자

mysql> select * from SELECTION_VC limit 1; 
+-------------+-------------+-------------+--------+ 
| CAMPAIGN_ID | CONTACT_ID | COLUMN_NAME | MONTH | 
+-------------+-------------+-------------+--------+ 
| ALCA-32515W | ALCA-2X08DX | A   | 201207 | 
+-------------+-------------+-------------+--------+ 
1 row in set (0.00 sec) 

기능 : 내가 대문자를 사용하는 경우, 모든 것이 OK입니다

mysql> select * from selection_vc limit 1; 
ERROR 1146 (42S02): Table 'mydb.selection_vc' doesn't exist 

?) 테이블 이름에서만 열 이름을 소문자 또는 대문자로 액세스 할 수 있습니다. 이 문제는 Linux에 설치된 데이터베이스에서만 발생합니다. Mac에서는이 문제가 없습니다.

MySQL 구성에서 무엇인가 놓쳤습니까? 아니면 버그입니까? 매뉴얼의 Identifier Case Sensitivity 절에서 설명한 바와 같이

답변

5

: MySQL의에서

는, 데이터베이스는 데이터 디렉토리에있는 디렉토리에 해당합니다. 데이터베이스 내의 각 테이블은 데이터베이스 디렉토리 내의 적어도 하나의 파일에 해당합니다 (그리고 저장소 엔진에 따라 더 많을 수도 있음). 트리거는 또한 파일에 해당합니다. 따라서 기본 운영 체제의 대/소문자 구분은 데이터베이스, 테이블 및 트리거 이름의 대/소문자 구분에 영향을줍니다. 이것은 Windows에서 이러한 이름이 대소 문자를 구분하지 않지만 대부분의 유닉스에서 대소 문자를 구분한다는 것을 의미합니다. Mac OS X은 유닉스 기반이지만 대소 문자를 구분하지 않는 기본 파일 시스템 유형 (HFS +)을 사용합니다.

이 말을 계속 : 모든 시스템에서

  • 사용 lower_case_table_names=1 :

    데이터 전송 문제가 데이터베이스 또는 테이블 이름의 문자 크기에서 발생 방지하기 위해, 두 가지 옵션이 있습니다. 이 단점은 SHOW TABLES 또는 SHOW DATABASES을 사용할 때 원래 문자 상자에 이름이 표시되지 않는다는 것입니다.

  • 유닉스에서는 lower_case_table_names=0, Windows에서는 lower_case_table_names=2을 사용하십시오. 이렇게하면 데이터베이스 및 테이블 이름의 대/소문자가 유지됩니다. 이 단점은 Windows에서 올바른 문 자로 데이터베이스 및 테이블 이름을 항상 참조해야한다는 것입니다. 당신의 문장을 유닉스로 옮긴다면, 대문자는 중요하며, 대문자가 맞지 않으면 작동하지 않습니다.

    예외 : 당신이 InnoDB 테이블을 사용하고이 데이터 전송 문제를 방지하려는 경우, 당신은 소문자로 변환 할 이름을 강제로 모든 플랫폼에서 1-lower_case_table_names을 설정해야합니다.

+0

당신은 그것에 나를 이길 :) – Romain

+0

감사 답변을! –