본문 바로가기

Database/mariaDB administrator

mysql error 1267 (HY000): Illegal mix of collations 무조건 해결방법

mysql error 1267 (HY000): Illegal mix of collations 무조건 해결방법 

mysql error 1267 (HY000): Illegal mix of collations 무조건 해결방법 

안녕하세요.
갑자기 다음과 같은 에러가 발생을 합니다.

[HY000][1267] (conn=10) Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '='

error 1267

위 에러는 SQL에서 조인을 하거나 if, case 문들으로 값을 비교할때, 양쪽 테이블의 collation이 달라서 발생하는 에러 입니다.

위 에러를 조치하기 위해서는 크게 두가지 방법이 있습니다.
하나씩, 하나씩 알아보도록 하겠습니다.

한쪽 테이블의 collation 변경

어느 한쪽 테이블의 collation을 변경 하는 방법입니다.
가장 근본적인 해결 방법이 되겠죠.
테이블의 collation 변경은 ALTER 문으로 해결이 됩니다.
다음과 같은 예제를 참고 하여 해당 테이블의 collation을 변경하여 맞춰 주시면 에러가 안날 겁니다.

 

 

 

ALTER TABLE table_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

 

SQL에서 임시로 collation 변경

다음은 임시로 collation을 변경하여 에러를 방지 하는 방법입니다.
방법은 join시 join 키를 명시하는 on 절이나 where 절에 다음과 같이 처리를 해주는 것 입니다.

# ANSI SQL 문법의 경우
on a.join_col_nm collate utf8mb4_general_ci = b.join_col_nm

# 일반 SQL 문법의 경우
where a.join_col_nm collate utf8mb4_general_ci = b.join_col_nm

위와 같이 변경을 해서 맞춰줄 한쪽 테이블쪽의 collate의 변경 타입을 입력해주는 방법 입니다.
생각보다 간단하게 해결이 되실겁니다.

감사합니다.

by.sTricky