본문 바로가기

IT/기타

이모지가 저장이 안 돼요 (MySQL UTF-8)

올해 민음사 북클럽에 가입해서 활동중인데 그리 긴 글은 아니지만 이모지를 넣어서 글을 저장했다가,

이모지 이후의 글이 다 날아가고 저장되는 그런 참사를 격었다.. 흑 

 

대충 캐릭터 셋 문제겠거나 생각은 했는데 확실하진 않아서 찾아봤다. 

 

MySQL의 경우 UTF-8 이 3 바이트까지 밖에 표현하지 못 한다. 

그러나, 이모지는 갯수가 늘어나면서 4바이트까지 표현하는 경우가 늘어났다. 

그러면서 4바이트를 사용하는 이모지를 저장하게 되는 경우 이모지가 빈칸으로 저장되거나 깨져서 저장된다. 

(MySQL은 왜 3바이트만 줬을까? 문자의 경우 3바이트로 처리가 모두 가능하다)

 

8.0 버전 이후로는 utf8mb4 로 기본 값 설정이 되어 있으므로 저장이 잘 된다. 

그 전 버전이라면 캐릭터 셋을 변경해야 한다. 

 

이미 사용중인 데이터베이스라면, 캐릭터셋 변경을 하더라도 기존 테이블, 데이터에는 영향을 주지 않는다

alter 명령어를 사용하여 기존 테이블 세팅을 변경해주어야 한다

 

정규식을 사용하여 이모지를 제거한 뒤 텍스트만 저장하는 방법을 사용하면 된다. 

MySQL 은 DB, 테이블, 컬럼 각각 케릭터 셋팅을 할 수 있기 때문에 주의 해야 한다...! 

MySQL 스키마 조회 명령어:

https://stackoverflow.com/questions/1049728/how-do-i-see-what-character-set-a-mysql-database-table-column-is

 

How do I see what character set a MySQL database / table / column is?

What is the (default) charset for: MySQL database MySQL table MySQL column

stackoverflow.com

 

정규식을 사용하여 이모지를 삭제하는 방법도 간단하다 생각했는데, 세상에 간단한 일은 하나도 없다... ㅎㅎ 

 

자바에서 4 바이트 이모티콘을 처리하는 방법: 

https://meetup.nhncloud.com/posts/317