렴소네 블로그

mysql character set 문제 본문

DataBase/mysql

mysql character set 문제

렴소 2018. 12. 16. 01:28

mysql 로 데이터 배치 작업을 하는데 아래와 같은 오류가 발생했다


illegal mix of collations for operation 'case'


생전 처음 보는 오류라서 검색해서 찾아보는데 대부분 나오는 내용이 character set 에 관한 문제라고 한다.


????? 캐릭터셋에 문제가 왜 있지? 하고 찾아봤는데.


명시적으로 설정하지 않으면 기본 캐릭터 셋은 latin1이라고 한다. 쿼리로 조회가 가능하다고 하여 확인해보았다. 명령어는


show variables like 'char%';


실제로 character set 이 latin1 로 지정되어있었다. 그러면 우리는 당연히 utf-8 로 변경하는게 문제가 없을거라는 생각을 하고 데이터베이스의 캐릭터셋을 다 utf-8 로 변경하였다.


db 는 aws의 rds를 사용하고 있어서 aws의 파라미터 그룹에서 character set과 관련된 내용들을 

utf8 , utf8_general_ci 로 변경해 주었다. 참고로 

(utf_general_ci는 전체 표준을 구현해야하는 utf_unicode_ci와 비교하여 (표준에 따라) 작고 정확하지 않은 비교 집합을 사용하여. 수행 할 계산이 적기 때문에 general_ci 집합이 더 빠르다.) 라고한다.


근데 파라미터 그룹을 변경했는데도 계속해서 같은 오류가 나타나길래 확인해봤더니.. db자체의 파라미터 그룹은 바꼈는데 테이블은 안바뀌어 있었다.


테이블의 수가 많지 않아서 테이블 하나하나 변경해주니 정상적으로 작동했다.


변경해주는 명령어는


alter table 테이블명 convert to character set utf8;

(utf_general_ci로 자동으로 변경된다.)