Programming/MySQL

MySQL 한글 물음표, 한글 깨짐 해결 방법 (mysql 5.6)

Jan92 2021. 7. 31. 23:47

mysql 5.6

 

서버에 프로젝트를 배포하여 테스트하던 중 Database Schema 설정을 utf8으로 했는데도 insert 되는 한글이 '???'로 깨져서 들어가는 현상이 발행하여 해결 방법을 찾아보았습니다.

 

* 사용된 mysql 버전은 5.6 버전입니다.

 

이러한 현상이 발생하는 이유는 mysql 의 character set을 명시적으로 설정하지 않으면 MySQL 5.7 이하 버전은 latin1, MySQL 8은 utifmb4가 default 값으로 설정되기 때문이라고 합니다.

 

해결 방법은 아래 과정에 따라 charater set을 명시해주면 됩니다. 

 


 

mysql status

mysql에 접속하여 status 명령어를 입력하면 Server charcterset, Db charcterset이 latin1으로 설정된 것을 확인할 수 있습니다.

 

설정을 바꾸기 위해 우선 mysql을 종료하고 터미널에서 다음 명령어를 입력합니다.

 

vi /etc/my.cnf

* vi는 linux의 편집기입니다.

해당 명령어를 통해 etc 디렉토리 내부에 my.cnf 파일을 편집기로 열게 됩니다.

 

 

mysql

my.cnf 파일을 열어 [mysql] 아래에 해당 코드를 추가해줍니다.

 

collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4
skip-character-set-client-handshake

 

skip-character-set-client-handshake : 클라이언트의 인코딩 설정을 무시하고 데이터베이스의 인코딩을 사용하는 설정입니다.

 

 

* 리눅스(Linux) 명령어

 

- i  를 누르면 편집기가 insert 모드로 전환됩니다. 다음으로 입력할 곳으로 커서를 이동하고 추가할 내용을 입력합니다.

- esc 를 누르면 insert 모드가 종료됩니다.

- 수정된 것을 저장하는 명령어는 :w 입니다.

- :q 를 입력하면 편집기가 종료됩니다.

 

 

편집기가 종료되고 터미널이 my.cnf 파일에서 빠져나오면 다음 명령어로 mysql을 재시작합니다.

# CentOS7
systemctl restart mysqld

# CentOS6
server mysqld restart

# ubuntu
service mysql restart

운영체제에 따른 mysql 재시작 명령어입니다.

 

 

utf8mb4

다시 mysql에 접속하여 characterset을 살펴보면 utf8 mb4로 변경된 것을 확인할 수 있습니다.

 

 

* utf8과 utf8mb4는 이모티콘 (emoji)가 들어갈 수 있는지의 차이입니다.