Devhyun

메뉴

현재 화면 위치

데브현 메인 블로그 포스트

타이틀

MySQL에서 Emoji(이모지) 데이터 처리하기

2019.08.13
핫한

Emoji(이모지)

초기에는 휴대폰에서 사용하는 그림 문자로 이모니콘과는 달리 그림 형태의 문자로 문자에 많이 사용되었다고 합니다. 이후에 아이폰, 구글에서 이모지 입출력 기능을 도입하여 유니코드화 표준화 되어 지금까지 사용되고 있습니다.

😄😃😀😊🐶🐹🏠
🎍📷🚪🎧

다양한 아이콘이 있습니다 !

유니코드 충돌

많은 애플리케이션에서 기본 언어셋을 UTF-8로 지정하여 사용하고 있었습니다. 프로그래밍을 하면서 한글이 깨지는 현상을 발견하면 항상 언급되곤 했죠.

데브현에서는 포스팅 작성에 마크다운 에디터(TOAST)를 사용하고 있었고 툴바를 커스터마이징하여 이모지 선택할수 있는 툴바 기능을 적용하였습니다.

post1.png

열심히 첫번째 포스팅을 작성하다가 임시 저장을 하는데 데이터베이스 관련 에러가 발생하더군요.. 😓

[ERROR] - Error: Error: Incorrect string value: 'xF0x9Fx92xBD...

데이터베이스에 INSERT할때 잘못된 문자열이라는데..
원인은 MySQL의 언어 설정이였습니다.

UTF-8 문자 집합은 1~4 바이트까지 가변바이트 형태로 저장이 가능하게 설계되어있습니다.

MySQL/MariaDB는 UTF-8을 3바이트 가변 자료형으로 설계하였기 때문에 최근에 나온 4바이트 문자열을 저장하려고 하면 값이 손실되는 현상이 발생합니다 !

다행히, MYSQL 5.5.3 이후 버전에서는 가변 4바이트의 UTF-8 문자열을 저장할 수 있는 utf8mb4 라는 언어셋이 추가되었습니다.

문제 해결

데이터베이스의 언어셋을 변경해봅시다.

먼저 데이터베이스 설정 파일에서 아래의 내용을 추가 및 변경해주세요.

vi /etc/my.cnf

[mysqld]
collation-server=utf8mb4\_unicode\_ci
character-set-server=utf8mb4
skip-character-set-client-handshake

skip-character-set-client-handshake는 클라이언트의 시스템 인코딩을 사용하지 않게 하는 설정입니다.

그 후에 기존에 만들어진 데이터베이스가 있다면 alter database명령어를 통해 언어셋과 collate를 변경할 수 있습니다.

ALTER DATABASE 데이터베이스이름 CHARACTER SET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

이제 마음껏 무료 이모티콘을 쓸수 있게 되었습니다 😙

0개의 댓글

로그인을 하시면 댓글을 작성할 수 있어요 !
목록으로 가기