ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [MySQL] 대소문자 구분 하는 방법, 'lower_case_table_names'
    database/mysql 2020. 6. 24. 23:10

     

    MySQL, 대소문자 구분 하는 방법, 'lower_case_table_names'


    안녕하세요? 장장스입니다.

    오늘은 MySQL 이용시 대소문자를 구분하는 문제에 대한 포스팅입니다.

     

    MySQL이 대소문자를 구분하는 방법


    MySQL에서 데이터베이스는 데이터 디렉토리(data directory) 내의 디렉토리들(directories)에 상응됩니다.

    데이터베이스를 구축하고 여러가지 테이블을 생성하게 되면 각각의 테이블들은 데이터베이스 디렉토리의 하나의 파일로 남게 됩니다. 트리거 또한 파일로 저장이 됩니다.

    즉, 데이터베이스를 구축한 운영 체제에 따라 데이터베이스, 테이블, 트리거의 이름의 대/소문자 구분에 대해 영향을 줄 수 있다는 겁니다.

    많은 사람들이 사용하는 Windows에서는 대소문자를 구분하지 않지만 대부분의 Unix나 Linux와 같은 운영체제에서는 대소문자를 구분한다는 것을 뜻합니다. ('유닉스 파일 시스템'(UFS)은 같은 이름이라도 대소문자가 다르면 다른 파일로 구분합니다.)

    그리고 MySQL에서 lower_case_table_names 시스템 변수는 서버가 대소문자를 구분하는 방법에 영향을 줍니다.

    지금 당장 다음 명령어를 입력해보세요.

    show variables like 'lower_case_table_names';

    그러면 0, 1, 2 세가지 숫자중에 하나를 확인 하실 수 있습니다.

     

    value 설명
    0 대소문자를 구분합니다. Windows 또는 MacOS와 같이 대소문자를 구분하지 않는 파일 이름을 가진 시스템에서 MySQL을 실행하는 경우 이 변수를 0으로 설정하는 것을 추천하지 않습니다.
    1 테이블 이름은 디스크에 소문자로 저장되며 이름 비교는 대소문자를 구분하지 않습니다. MySQL은 저장 및 조회 시 모든 테이블 이름을 소문자로 변환하여 저장합니다. 이 동작은 데이터베이스 이름 및 테이블 별칭에도 동일하게 적용됩니다.
    2 테이블과 데이터베이스 이름은 CREATE TABLE 또는 CREATE DATABASE 문에 지정된 문자 케이스를 사용하여 디스크에 저장되지만 MySQL은 조회 시 소문자로 변환한다. 이름 비교는 대소문자를 구분하지 않습니다. 이것은 대소문자를 구분하지 않는 파일 시스템에서만 작동합니다.

     

     

    lower_case_table_names 설정 변경


    저는 다음과 같은 문제를 겪었습니다.

    회원관리 테이블에서 회원 아이디가 대소문자 구분없이 검색이 되어졌습니다. 구글링을 통해 lower_case_table_names 시스템 변수 설정을 변경하면 된다는 것을 확인했으나 실행되지 않았습니다.

    MySQL 공식문서에는 다음과 같이 적혀 있었습니다.

    lower_case_table_name은 서버를 초기화할 때만 구성할 수 있으며, 서버를 초기화한 후 lower_case_table_names 설정을 변경하는 것은 금지된다(prohibited).

    네, 처음에 설정 안하면 다시 만들어야 돼요 ㅎ

    (거지같은.... ㅆ.. ㅎㅎ 무료로 사용하게 해주셔서 감사합니다..ㅋㅋㅋ)

     

     

     

    References


     


    잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)

     

     

    'database > mysql' 카테고리의 다른 글

    [MySQL] SELECT한 테이블에 WHERE 조건문 걸기  (1) 2020.04.12

    댓글