MySQL/MariaDB 데이터 베이스에서 기본 설정은 테이블명의 대소문자를 구분하고 있습니다.

소문자로 생성한 테이블을 조회시 대문자로 조회를 하게 되면 테이블 명을 찾을 수 없다고 나옵니다.

대소 구분은 lower_case_table_names 라는 변수의 값에 영향을 받습니다.

 

https://mariadb.com/kb/ko/identifier-case-sensitivity/

  • 0인 경우(Unix 기반 시스템 기본값), 대/소문자를 구분하도록 설정됩니다. (기본 값)
  • 1인 경우(Windows 시스템 기본값), 이름이 소문자로 저장되고 대/소문자를 구분하지 않습니다.
  • 2인 경우(Mac OS X 시스템 기본값), 이름은 선언된 대로 저장되고 소문자로 비교됩니다.

AWS RDS 에서 lower_case_table_names의 값을 수정하기 위해서는 파라메터 그룹에서 해당 값을 변경 후 데이터베이스를 재시작 해주어야 합니다.

 

파라메터 그룹을 생성하지 않은경우 새로 만들고 데이터베이스와 연결 해야 합니다.

참고 : https://velog.io/@shawnhansh/AWS-RDSmySql-프리티어-생성하기 

 

주의 1 : AWS에서 제공하는 MySQL/MariaDB의 경우 lower_case_table_names=2 를 지원하지 않습니다.

참고 : Amazon RDS for MySQL에 대한 내용이지만 MariaDB에도 동일합니다.

버전에 따라 적용이 다르므로 아래 글을 참고 하시기 바랍니다.

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/MySQL.KnownIssuesAndLimitations.html#MySQL.Concepts.ParameterNotes

 

주의 2 : 테이블을 생성하기 전에 값을 결정하세요

lower_case_table_names 값은 테이블 명의 collection 등에 영향을 미치는 것으로 추정됩니다.

해당 값을 변경하기 전에 생성된 테이블명은 값을 변경한 후에는 대문자로도 소문자로도 찾지 못하는 현상에 봉착 할 수 있습니다.

해당 값을 변경 후 테이블 명을 인식하지 못하는 경우 원래 값으로 복원 하면 원래 테이블을 생성한 이름으로 인식가능합니다.

lower_case_table_names=1로 변경한 후에 생성한 테이블은 소문자, 대문자 모두 인식합니다.

 

주의3 : 마이그레이션 등을 수행하는 경우 반드시 사전에 원본 DB와 해당 값을 일치시켜야 합니다.

불일치 하는 경우 문제가 발생할 수 있다고 합니다. 반드시 사전 테스트가 필요 합니다.

 

주의4: 해당값을 수정후 파라메터 그룹이 데이터베이스와 연결되어 있는경우 자동으로 적용을 하는 것으로 보여지지만 해당 데이터베이스를 재시작 해야 적용됩니다. (MySQL 5.3이하에서는 바로 적용 되지만 최근 버전에서는 재시작을 해야 적용됩니다.)

 

끝.

 

 

 

 

 

+ Recent posts