어떤 값이 나와야되는데 안나온다고 오류 수정 요청이 있었다. 수정했는데 되게 어이없는 이유였다.
원인은 이거였다.
테이블 이름이 keyboard이고, qwerty라는 컬럼이 있다고 가정하고, 다음의 쿼리를 날려본다.
SELECT qwerty FROM Keyboard;
이렇게 하면 qwerty 칼럼의 내용들을 잘 가지고 올테다. 하지만 만약 다음과 같은 쿼리를 날리면 어떻게 될까?
SELECT QWERTY FROM keyboard;
정답은 mysql 대소문자 설정에 따라 다르다. 다음과 같은 쿼리를 날려 보았을때
SHOW variables LIKE 'lower_case_table_names';
값이 0인 경우 대소문자를 구분하고, 값이 1인 경우 대소문자를 무시하고, 값이 2인 경우에는 대소문자를 구분하지만 이름 비교에서는 구분하지 않는다.
구체적은 설명은 다음과 같다. mysql 가이드에서 그대로 긁어왔다. https://dev.mysql.com/doc/refman/5.6/en/identifier-case-sensitivity.html
Value | Meaning |
---|---|
0 | Table and database names are stored on disk using the lettercase specified in the CREATE TABLE 혹은 CREATE DATABASE문에서 명시된 대소문자로 데이터베이스명과 테이블명이 디스크에 저장된다. 이름 비교는 대소문자를 구분한다. 만약 우리가 대소문자를 구분하지 않는 파일명을 가지고 있는 시스템(윈도우나 맥 OS) 에서 Mysql을 돌리고 있다면 이 값을 0으로 설정하지 않는 것이 좋다. 만약 우리가 대소문자를 구분하지 않는 파일시스템에서 --lower-case-table-names=0으로 값을 강제로 0으로 만들어 버리고, 다른 대소문자를 사용해서 MyISAM 테이블명에 접근한다면, 인덱스 충돌이 일어날 수도 있다. |
1 | Table names are stored in lowercase on disk and name comparisons are not case-sensitive. MySQL converts all table names to lowercase on storage and lookup. This behavior also applies to database names and table aliases. 테이블명이 디스크에 소문자로 저장되며 이름 비교는 대소문자를 구분하지 않는다. MySQL은 스토리지와 lookup에 모든 테이블명을 소문자로 전환한다. 이 전환은 데이터베이스명과 테이블 aliase(별칭)에도 적용된다. |
2 | Table and database names are stored on disk using the lettercase specified in the CREATE TABLE or CREATE DATABASE statement, but MySQL converts them to lowercase on lookup. Name comparisons are not case sensitive. This works only on file systems that are not case-sensitive! InnoDB table names are stored in lowercase, as for lower_case_table_names=1 CREATE TABLE 혹은 CREATE DATABASE문에서 명시된 대소문자로 데이터베이스명과 테이블명이 디스크에 저장되나, MySQL이 룩업에 소문자로 전환한다. 이름비교는 대소문자를 구분하지 않는다. 이 값은 대소문자를 구분하지 않는 파일 시스템에서만 동작한다! InnoDB 테이블명은 lower_case_table_names=1 조건처럼 소문자로 저장된다. |
여튼 나같은 경우에는 대소문자를 구분하지 않도록 설정은 되어있었지만은, 결과를 가지고올때는 qwerty칼럼이 아니라 QWERTY 칼럼으로 값을 가지고 와서, 키매핑을 잘못 시켜준 상황이었다. (나를 qwerty일거라고 생각하고 코드를 짰는데 QWERTY였던..)
'개발개발 > shoveling shoveling' 카테고리의 다른 글
ajax beforesend not working일땐 beforeSend인지 확인하세요.. :> (0) | 2018.08.22 |
---|---|
error: pathspec .... 을 내뱉으며 브랜치 체크아웃이 안될때는 fetch를 하세요 (0) | 2018.08.22 |