쉽게 쉽게

MariaDB 대소구분 해결 본문

DB/MYSQL와 MariaDB

MariaDB 대소구분 해결

곱마2 2024. 3. 21. 21:54
반응형

1.  이슈

MariaDB은 기본적으로 대소문자 구분 없이 비교 및 검색이 가능하다.

그러나 userid로 로그인 중 대소문자가 구별이 되지 않아 오류가 발생했다.

예를 들어 테스트라는 유저의 아이디는 test12인데, Test12와 test12가 모두 동일하게 조회되어 로그인이 되지 않았던 현상이다.

때문에 MariaDB에서 직접적으로 대소문자를 구별해주기 위한 작업을 진행했다. 

2. 해결방법

아래는 문제가 발생했던 쿼리를 재현한 것이다.  

--문제 쿼리--
SELECT userid FROM user_table WHERE userid = 'test12'
-- 조회결과 --
 Test12, test12 모두 나옴


해결방법1: 조건에 BINARY 함수 추가

--문제 쿼리--
SELECT userid FROM user_table WHERE BINARY(userid) = 'test12'
-- 조회결과 --
 test12만 나옴

 

해결방법2: 테이블 생성시 추가

 

BINARY 문자열 타입은 문자가 아닌 바이트를 기준으로 비교나 검색을 진행한다.

MariaDB에서 지원하는 BINARY타입에는 BINARY, VARBINARY, BLOB이 있다.

 

생성시 데이터 타입을 지정

-- 데이터 타입을 BINARY 문자열 타입으로 지정 --
CREATE TABLE `user_table` ( `userid` varbinary(10) NOT NULL, PRIMARY KEY (`userid`) )

-- 단 BLOB로 표현되어 유지보수시 번거로울 수 있다.

 

BINARY 옵션 추가

-- BINARY 옵션을 추가 --
CREATE TABLE `user_table` ( `userid` varchar(10) binary NOT NULL, PRIMARY KEY (`userid`) )

-- 해당 방법을 추천

 

 

참고

https://papababo.tistory.com/entry/MySQL-MariaDB%EC%97%90%EC%84%9C-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%8C%80%EC%86%8C%EB%AC%B8%EC%9E%90%EB%A5%BC-%EA%B5%AC%EB%B6%84%ED%95%98%EC%A7%80-%EC%95%8A%EB%8A%94%EB%8B%A4

 

MySQL MariaDB에서 문자열 대소문자를 구분하지 않는다!

현상 : 어라! MariaDB에서 쿼리를 날렸는데 정확하게 매칭되는것만 결과로 줘야하는데.... 누구냐넌! 왜왜~대소문자를 가리지 않고 오는겨? 원인 : MySQL MariaDB에서 문자열 대소문자를 구분하지 않는

papababo.tistory.com

 

https://string.tistory.com/12

 

[MySQL] 대소문자 구분하여 비교 및 검색 (BINARY)

MySQL은 비교나 검색을 수행할 때 기본적으로 대소문자 구분 없이 비교 및 검색이 가능하다. 이에 따라 아이디나 패스워드 등 대소문자가 엄격히 구분되어야 하는 경우엔 서로 다른 값으로 인식

string.tistory.com

 

잘못된 내용이 있다면 지적부탁드립니다. 방문해주셔서 감사합니다.
반응형