2021. 1. 21. 15:41ㆍIT개발/Database
현상 : 어라! MariaDB에서 쿼리를 날렸는데 정확하게 매칭되는것만 결과로 줘야하는데.... 누구냐넌! 왜왜~대소문자를 가리지 않고 오는겨?
원인 : MySQL MariaDB에서 문자열 대소문자를 구분하지 않는다. mysql 공식문서 참고 : https://dev.mysql.com/doc/refman/5.6/en/case-sensitivity.html
해결 : 대소문자 구분하고 싶으면, BINARY 함수를 사용! 또는 테이블 생성시, BINARY옵션을 줘서 해결!
예시) EMPLYR_ID = 'test' 인 사용자가 하나 있다고 하자. 'TEST'로 검색시 안나와야하는데 나옴 ㅡ,.ㅡ
해결방법1
before | SELECT * FROM comtnemplyrinfo WHERE EMPLYR_ID = 'TEST' | ===> test 란 소문자로된 사용자 아이디가 검색이 됨;;;; 원치않는동작!!! |
after | SELECT * FROM comtnemplyrinfo WHERE BINARY(EMPLYR_ID) = 'TEST' | ===> 검색결과 안나옴! 고로치! 그기야! |
해결방법2 (강추)
ALTER TABLE comtnemplyrinfo CHANGE EMPLYR_ID EMPLYR_ID VARCHAR(100) BINARY NOT NULL
해결방법3
타입을 VARBINARY로 변경하는 방법.... 하지만 검색결과를 볼시, BLOB으로 표현되어 유지보수 측면에서 패스~
해결방법4
더있는데 생략한다.
보너스 트랙 (테이블명 대소문자 가릴까 말까?)
- 테이블 명을 소문자로만 취급할지 아니면 대문자로만 취급할지는 아래의 정보를 이용해 설정할것!
먼저 조회부터 해보자! ==> SHOW VARIABLES LIKE 'lower_case_table_names'
값의 의미는 아래 표를 보자
lower_case_table_names 값 | 의미 | 비고 |
0 | 쿼리시, 테이블명 대·소문자 구분함 | ==OS별 기본값== 리눅스, 유닉스 = 0 윈도우 = 1 맥키토시 = 2 |
1 | 쿼리시, 테이블명이 대/소문자든 무조건 소문자로 인식 | |
2 | 윈도우에서 테이블 명을 대/소문자를 구분해서 생성 |
예시) 1일경우, 테이블명은 대문자로 주던 소문자로 주던 동작함.(참고로 저희 회사는 모든 프로젝트를 1로 설정해서 사용중)
SELECT * FROM COMTNEMPLYRINFO
SELECT * FROM comtnemplyrinfo
그럼 우째 변경해야하나?
1. AWS의 RDS라면, RDS > 파라미터 그룹에 가서 lower_case_table_names 검색하면 설정가능하다!
2. 서버에 설치버전이면, /etc/my.cnf 경로에 가서 원하는 값으로 편집하라!(당근 재기동해야겠쥬?)
'IT개발 > Database' 카테고리의 다른 글
[mysql/mariaDB] 원격지DB에서 로컬PC로 바로 export (0) | 2021.03.09 |
---|---|
[mysql/mariaDB] dump export/import 하기 (0) | 2021.03.09 |
MSSQL 데이터 내보내기 오류( 엑셀 export 오류 발생 ) - 'Microsoft.ACE.OLEDB.12.0' 공급자는 로컬 컴퓨터에 등록할 수 없습니다. (System.Data) (0) | 2019.03.21 |
Oracle -> Mssql 데이터 마이그레이션하기(SQL Server Migration Assistant For Oracle) (6) | 2018.04.06 |
MICROSOFT SQL SERVER MIGRATION ASSISTANT FOR ORACLE 사용시 오류사항 공유 (2) | 2018.03.20 |