리눅스

MySQL 캐릭터셋(문자 인코딩)을 UTF-8로 변경하는 방법

변군이글루 2013. 7. 16. 01:10
반응형

MySQL 캐릭터셋(문자 인코딩)을 UTF-8로 변경하는 방법

다국어 데이터를 저장하거나 웹 애플리케이션과 연동할 때, 데이터베이스의 문자 인코딩(Character Set) 설정은 매우 중요합니다. MySQL에서는 기본 문자셋으로 **UTF-8(utf8 또는 utf8mb4)**을 사용하는 것이 일반적인 추세입니다.

1. 현재 문자셋 설정 확인

현재 설정된 문자셋을 확인합니다.

mysql> SHOW VARIABLES LIKE 'char%';

MySQL 서버의 문자셋 관련 변수들을 출력합니다.

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
+--------------------------+----------------------------+
  • 대부분이 latin1 등으로 설정되어 있다면 UTF-8로의 변경이 필요합니다.

특정 테이블의 문자셋을 확인합니다.

mysql> SHOW TABLE STATUS FROM [데이터베이스명] LIKE '테이블명';

2. my.cnf 설정 파일 수정

MySQL 서버의 전역 문자셋을 변경하려면 /etc/my.cnf(또는 /etc/mysql/my.cnf) 파일을 편집합니다.

sudo vim /etc/my.cnf

각 섹션별로 문자셋을 utf8로 설정합니다.

[client]
default-character-set = utf8

[mysql]
default-character-set = utf8

[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
init_connect = SET NAMES utf8
init_connect = SET collation_connection = utf8_general_ci
default-character-set = utf8

[mysqldump]
default-character-set = utf8
  • init_connect는 비루트 사용자 로그인 시 자동으로 실행되어 문자셋 설정을 적용합니다. 루트(root) 계정에는 적용되지 않습니다.

3. MySQL 재시작

설정 반영을 위해 MySQL 서비스를 재시작합니다.

sudo systemctl restart mysqld

재시작 후 다시 문자셋을 확인해 변경이 반영되었는지 확인합니다.

mysql> SHOW VARIABLES LIKE 'character_set%';

4. 추가 팁: utf8 vs utf8mb4

MySQL에서 utf8은 실제로 3바이트 UTF-8이며, 일부 이모지(emoji)나 특수 문자는 저장되지 않을 수 있습니다.

이를 해결하려면 utf8mb4를 사용하는 것이 더 안전합니다.

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = SET NAMES utf8mb4
init_connect = SET collation_connection = utf8mb4_general_ci

 

728x90
반응형