회사에서 중복된 데이터를 찾는 과정이 있었는데 group by가 다른 문자를 병합하는 문제가 발생하였다 그 원인이 궁금하여 찾아 보았다
원인은 collation으로 정해져 있는 인코딩을 기반으로 글자끼리 어떻게 비교할지 정의해 놓은 규칙을 사용하기 때문에 생긴 일이었다.
ref : https://www.cubrid.org/manual/ko/11.2/sql/i18n.html
콜레이션은 문자를 비교하는 방법을 결정한다. 사용자는 흔히 콜레이션을 통해 대소문자를 구분하지 않거나 구분한다. 예를 들어 “ABC”와 “abc”는 대소문자 구분 무시(case insensitive) 콜레이션에서는 동일한 반면, 대소문자 구분(case sensitive) 콜레이션에서는 동일하지 않다. 또한 콜레이션에 따라 비교 결과가 “ABC” > “abc”가 되거나 “ABC” < “abc”가 될 수 있다
Collation 변경
! collation 변경시 주의 해야함
ref : https://www.lesstif.com/dbms/mysql-8-character-set-collation-91947077.html
1) 데이터베이스 레벨
ALTER DATABASE cpp CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
2) 테이블 레벨
ALTER TABLE t_bar CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci ;
3) 세션 레벨
SET collation_connection = 'utf8mb4_general_ci' ;
4) 쿼리 레벨
SELECT cash, in_cash FROM tb_cash where svc_inst_no = @tid and cash_attr_no = @cashAttrNo limit 1000 COLLATE utf8mb4_general_ci ;
ref : https://velog.io/@mooh2jj/MySQL-Character-Set-Collation-%ED%99%95%EC%9D%B8