[MariaDB] Illegal mix of collations 1267 : collation 확인 및 조치
MariaDB에 쿼리를 실행하다가 오류코드 1267을 만났다면,
|
위와 같이 진행하는 편이 관련 변수 변경하고 동일쿼리 실행테스트 하는 시간을 줄여줄 것이다.;
collation은 connection/database/server 레벨로 상이할 수 있으며, table/column별로도 상이할 수 있다.
골치 아픔..
구글링을 해보면,
변수 설정을 변경 후 테스트해 보는 글들이 많은데, 동일한 에러를 계속 보게 될지도 모른다.
최초 DB 생성 시부터 캐릭터 셋과 데이터 정렬 선택 시,
default는 어떤 값인지 서비스하려는 DB에는 어떤 " 캐릭터 셋과 데이터 정렬"이 적합할지 고민을 했어야 한다.
현재 Live 서비스 중인 DB들이 그렇다면?!!!?
음... 어떻게/언제(점검시점) 수정하는 것이 좋을지 한 번쯤 고민이 필요하지 않을까..
혹시 좋은 개선 방안이 있다면 공유하자.
# 에러 메시지
error 1267
Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_unicode_ci,IMPLICIT) for operation '='
## collation 변수 확인
show variables like 'collat%;
Varialble_Name | Value |
collation_connection | utf8mb4_unicode_ci; |
collation_database | utf8mb4_general_ci; |
collation_server | utf8mb4_unicode_ci; |
조회 시 위와 같이 상이하게 조회될 수 있음.
특정 DB 접속 전/후로 위 쿼리 실행해보길 바람.
- DB 서버에만 접속 후 변수 조회 결과와 특정 DB 접속하여 조회한 경우 상이할 수 있음.
## 해결책
1안) 생성할 때부터 collation 을 맞춰주거나
=> 관련 변수 설정 변경은 권장하지 않음. 여러 side effect가 있을 수 있으므로 로컬에서 충분한 테스트 후 적용필요
2안) 조회 쿼리에서 collation 변경
ex) where t1.column_name = t2.column_name collate utf8mb4_general_ci