지난글에서는 아마존 리눅스(Amazon Linux)에 APM을 설치해 보았습니다.


이번글에서는 설치한 MySQL의 문자셋 설정을 바꾸어 보도록 하겠습니다.


MySQL은 (MariaDB도 마찬가지) 설치하게 되면, MySQL 서버측 기본 문자셋이 Latin-1으로 되어 있습니다.


Latin-1은 글자 하나를 표현하는데 2바이트를 사용합니다. 하지만 한중일과 같은 언어는 현대에는 3바이트는 되어야 제대로 된 글자 표현을 할 수 있습니다. 


따라서 MySQL을 설치하고 세팅할때 UTF-8 을 많이 사용했지만, 최근에는 이모티콘 표현이나 계속 추가되는 한자등 문자 하나당 4바이트 까지도 필요로 하고 있죠. 문제는 기존 MySQL의 UTF-8 은 최대 3바이트까지 밖에 표현을 못한다는 것이죠. (원래 표준은 4바이트가 가능하지만, MySQL은 3바이트로 제한 하였다고 합니다.)


MySQL에서는 4바이트 문자를 표현하기 위해 utf8mb4 라는 캐릭터 셋을 사용합니다. (2010년 부터 지원)


해외 사이트 글들을 읽어보면 왜 utf8mb4를 써야 하는지 분석한 글들도 있는데, 논리적으로 생각하면 명확합니다. PHP를 포함한 DB접근하는 프로그램들 입장에서는 UTF8을 사용한다는 것은 표준 UTF8, 즉 최대 4바이트까지의 문자를 표현할 수 있는데, DB는 3바이트까지 밖에 저장하지 못한다면, 일부 프로그램들에서는 문제가 발생할 소지가 있겠죠.


즉, 아래와 같은 상황이 되는 것이죠.


표준 UTF-8 

 

 MySQL

 UTF-8 = 최대 4바이트

!= 

UTF8 = 최대 3바이트 

 UTF-8 = 최대 4바이트

== 

UTF8MB4 = 최대 4바이트 


따라서, 사실상 표준 UTF-8의 문자들을 저장하기 위해서는 MySQL은 utf8mb4를 사용해야 한다는 것입니다.



이제 MySQL의 설정을 utf8mb4로 바꾸어 보겠습니다.


먼저 기존의 캐릭터셋을 확인해 보죠.


MySQL이 구동된 상태에서 아래와 같이 접속해 봅니다. (지난 글에서 제대로 세팅을 하였으면 MySQL이 구동되고 있을겁니다.)


$ mysql -u root -p


MySQL 프롬프트상에서 status 명령어로 상태를 확인합니다.


mysql> status;



서버 캐릭터셋과 Db 캐릭터셋이 latin1으로 되어 있네요. 클라리언트와 커넥션쪽은 utf8로 되어 있습니다.


이제 캐릭터 셋을 utf8mb4로 바꾸어 봅니다.


exit 명령으로 MySQL을 빠져 나옵니다.


아래와 같이 etc 디렉토리로 들어가서 my.cnf를 백업하고, my.cnf를 변경합니다.


$ cd /etc

$ sudo cp my.cnf my.cnf.ori

$ sudo vi my.cnf



변경할 my.cnf의 내용은 아래와 같습니다.


my.cnf에 아래의 내용중 수정해야 할 것은 수정하고, 없는 내용은 추가를 합니다.


[client]

default-character-set=utf8mb4



[mysql]

default-character-set=utf8mb4



[mysqld]

collation-server = utf8mb4_unicode_ci

character-set-server = utf8mb4


skip-character-set-client-handshake

init_connect="SET collation_connection = utf8mb4_unicode_ci"

init_connect="SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci"



my.cnf 를 수정하였으면, MySQL을 재실행 합니다.


$ sudo service mysqld restart


다시 MySQL에 접속하여 아래 명령어로 캐릭터 셋이 제대로 변경 되었는지 확인합니다.


mysql> status;


또는 아래의 MySQL 명령어로 더 자세히 캐릭터 셋의 변경 상황을 확인할 수 있습니다.


mysql> show variables like 'c%';





캐릭터 셋이 utf8mb4로 바뀐 것을 확인 할 수 있습니다.



다음 글에서는 지금 이 글들의 시리즈에서 사이트들의 구성을 어떻게 나누려고 하고 있는지 설명하겠습니다.




(C) 2017 WingsNote.com (무단 복제 및 게시 금지, 링크 허용)



신고
Posted by 날개

댓글을 달아 주세요

티스토리 툴바