MYSQL, character set 변경 방법 (데이터베이스, 테이블)

데이터베이스는 문자열 데이터를 저장할 때 캐릭터셋(character set)을 이용합니다. 어떤 캐릭터셋으로 인코딩 된 것인지에 따라 글자가 정상적으로 보이거나 깨져서 보이기도 합니다.

character set

컴퓨터는 알파벳이나 한글 같은 '문자'를 이해할 수 없기 때문에 character encoding 작업이 이루어집니다. 예를 들어, a1로, b2로 표현하기로 약속하는 식입니다. 즉 캐릭터셋은 문자에 대한 인코딩 집합을 의미합니다. 때문에 한글이 인코딩 되지 않은 캐릭터셋에 한글을 저장하면 컴퓨터가 이를 표현하지 못하고 글자가 깨져서 보이는 겁니다. 이런 이유로 한글을 포함한 다양한 언어를 문제없이 표현하는 utf8이 널리 사용되고 있습니다. 그래서 dbms를 설치하면 가장 먼저 하는 일이 기본 캐릭터셋을 utf8로 변경하는 것이죠.

현재 character set 확인 방법

현재 설정된 mysql의 캐릭터셋을 확인하는 쿼리문은 아래와 같습니다.

mysql> show variables like 'char%';

char로 시작하는 변수들을 보여달라는 쿼리문인데, 설정된 character set 정보를 모두 출력합니다.

default character set 설정 방법

따로 지정하지 않아도 db를 생성하고 테이블을 만들 때 적용되는 게 기본 캐릭터셋(default character set)입니다. mysql 5.7 버전 이하에서는 기본 캐릭터셋이 latin1로 설정되어 있습니다. 아마 대부분이 utf8로 바꿔서 사용하실 겁니다. 참고로 mysql 8에서는 기본 캐릭터셋으로 utf8mb4가 적용되도록 변경됐습니다.

 

mysql의 기본 캐릭터셋 설정은 OS별로 수정해야 할 파일 확장자명과 경로가 조금씩 다릅니다. 리눅스의 경우 my.cnf 파일을 수정합니다. 윈도우는 my.ini 파일을 수정합니다. 사용하고 계신 환경을 기준으로 ‘리눅스 mysql 5.7 my.cnf 위치’처럼 검색해서 확인하시면 될 거 같습니다.

 

1. 파일을 찾으셨으면 파일에 아래의 내용을 추가하고 저장합니다. utf8mb4로 설정한다고 가정했습니다.

[mysqld]
collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4
skip-character-set-client-handshake

2. mysql 서비스를 재시작합니다.

3. 앞서 설명한 캐릭터셋 확인 방법으로 제대로 변경됐는지 확인합니다.

이미 데이터베이스와 테이블을 latin1로 만든 경우 변경 방법

기본 캐릭터셋을 변경하더라도 이미 생성된 데이터베이스와 테이블의 캐릭터셋에는 영향을 주지 않습니다. 때문에 직접 변경해줘야 합니다.

 

[예시]

  • 데이터베이스명 : DB
  • DB에 생성된 테이블 : table_1, table_2

1. 데이터베이스의 캐릭터셋을 변경합니다.

alter database DB character set utf8mb4 collate utf8mb4_unicode_ci;

데이터베이스의 캐릭터셋을 바꿔도 생성된 테이블에는 영향을 주지 않습니다. 그래서 생성된 테이블도 직접 변경해줘야 합니다. 

 

2. 테이블의 캐릭터셋을 변경합니다.

alter table table_1 convert to character set utf8mb4 collate utf8mb4_unicode_ci;
alter table table_2 convert to character set utf8mb4 collate utf8mb4_unicode_ci;

보시는 바와 같이 이런 작업은 번거롭습니다. 이미 사용되고 있는 db라면 일일이 변경을 해줘야겠지만, 아직 사용자가 없고 세팅 단계라면 그냥 DB를 DROP 하고 다시 생성하는 게 더 편한 방법일 수 있습니다.

반응형

댓글

Designed by JB FACTORY