MySQL 콘솔에서 DB 생성시 유의사항 및 문자세트(Character Set) 설정 방법

MySQL 콘솔 모드에서 데이터베이스(DB)를 생성할 때 아래와 같은 명령어로 간단하게 생성을 하는 경우가 있습니다.

mysql>  CREATE DATABASE test;

위의 명령어를 해석하면 "test라는 데이터베이스를 생성하시오"가 됩니다.
test라는 DB에 특정 문자세트를 지정한 것이 아니기 때문에 test라는 데이터베이스의 기본 문자 세트(character set)는 디폴트로 latin1으로 설정됩니다.

latin1 문자세트는 영어를 주 언어로 사용하는 영어권 국가들이 사용하는 경우엔 인코딩 및 디코딩 결과에 문제를 일으키지 않지만 한국을 비롯한 아시아 같은 국가들의 언어는 문자가 깨져서 입력되거나 출력시 깨져 보이는 결과가 일어날 수 있습니다.
이러한 이유 때문에 현재와 같이 글로벌한 환경에서는 다국어가 사용되더라도 문자가 깨지지 않는 UTF-8 같은 유니코드 문자세트의 사용을 권장하고 있습니다.

문자세트는 데이터베이스 생성 단계에서 특정해야 이후 문제가 발생하지 않습니다.
UTF 8로 인코딩된 유니코드 문자세트로 DB를 생성하는 명령어는 아래와 같습니다.

mysql> CREATE DATABASE test DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

위의 명령어를 해석하면 "test라는 데이터베이스를 생성하되 기본 문자 세트를 UTF-8로 지정하고 정렬 방식은 utf8_unicode_ci로 생성하시오"가 됩니다.

MySQL 콘솔에서 이미 생성된 DB의 문자세트를 확인하는 방법은 다음과 같습니다.

1. MySQL 콘솔 로그인
$ mysql -u root -p;

2. 현재 생성되어 있는 데이터베이스 목록 보기
mysql > show databases;

image

3. 문자세트를 확인하고 싶은 데이터베이스 선택(여기서는 omeka 디비 선택)
mysql > use omeka;

image

4. omeka라는 DB의 문자세트 확인하기
mysql > show variables like 'character_set%';

image

위의 캡쳐 화면을 보면 omeka라는 DB의 문자세트가 utf8인 것을 알 수 있습니다.
이는 omeka라는 시스템용 DB 생성시 UTF-8 유니코드 캐릭터 세트로 DB를 생성했기 때문입니다.

그런데 위의 캡쳐 화면에서 character_set_server 변수명(Variable name)의 변수 값(Value)이 latin1인 것을 확인할 수 있습니다.
character_set_server는 MySQL 소프트웨어 설치시 기본 latin1으로 설치되기 때문에 mysql 데이터베이스 생성시 문자세트를 지정하는 것만으론 변경할 수 없습니다.

만약 MySQL 데이터베이스를 영구적으로 UTF-8 모드로만 사용하길 원하는 경우엔 아래와 같이 MySQL 설치 이후 mysql 환경 설정 파일을 강제로 수정한 후 저장한 다음 mysql 서비스를 재실행하면 모든 셋팅이 UTF-8 모드로 기본 설정됩니다.
이 경우 DB 생성 명령어도 문자세트 지정 없이 create database test; 명령어만 입력해도 test라는 DB는 문자세트가 모두 UTF-8 모드로 셋팅됩니다. 이미 MySQL 환경설정에 문자세트 지정을 강제했기 때문에 생성 단계에서 문자세트 지정 없이도 UTF-8 모드로 생성됩니다.

MySQL 5.7 버젼의 환경설정파일명은 mysqld.cnf이며 서버상의 기본 경로는 아래와 같습니다.

# mysqld.cnf 경로 :  /etc/mysql/mysql.conf.d/mysqld.cnf

환경설정파일의 수정 방법은 다음과 같습니다.

1. mysqld.cnf 파일을 에디터로 열기
$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf


2. 빨간색으로 표시된 부분만 해당 라인에 추가

[mysqld_safe]
default-character-set=utf8
socket  = /var/run/mysqld/mysqld.sock
nice  = 0

[mysqld]
character-set-server=utf8
collation-server=utf8_unicode_ci
init_connect = set collation_connection = utf8_unicode_ci
init_connect = set names utf8

#
# * Basic Settings
#
user  = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket  = /var/run/mysqld/mysqld.sock
port  = 3306
basedir  = /usr
datadir  = /var/lib/mysql
tmpdir  = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
이하 생략...
#

[client]
default-character-set=utf8

[mysqldump]
default-character-set=utf8


3. 저장하고(Ctrl + O) 에디터 모드 종료(Ctrl + X)

4. MySQL 서비스 재시작
$ sudo service mysql restart

5. MySQL 콘솔에 다시 로그인 후 DB를 문자세트 지정 없이 생성해본 후 해당 DB의 문자세트가 UTF-8로 설정되어 있는지 확인

image

6. 끝.

만약 적용 후 MySQL 서비스가 재시작되지 않거나 오류가 발생하는 경우엔 첨부한 mysqld.cnf 파일을 내려받은 후 사용 중인 서버의 mysql 환경설정파일 경로에 이 파일을 덮어씌우기 해보시기 바랍니다.
http://osasf.net/uploads/FileUpload/af/9660b8e4c599d799c680e92bad01fc.cnf




# 레퍼런스
- Character
  https://ko.wikipedia.org/wiki/%EB%AC%B8%EC%9E%90_%EC%9D%B8%EC%BD%94%EB%94%A9

- Unicode
  https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C

- UTF-8
  https://ko.wikipedia.org/wiki/UTF-8

mysql콘솔-현재생성되어있는DB보기.jpg
677 x 490 - 132K
mysql콘솔-디비선택.jpg
586 x 118 - 29K
mysql콘솔-문자세트확인.jpg
603 x 257 - 97K
cnf
cnf
mysqld.cnf
3K
mysql콘솔-문자세트확인(mysql환경설정파일수정후).jpg
640 x 348 - 100K
코멘트에 접속 혹은 등록.