MySQL(MariaDB)에서 이모티콘을 테이블에 저장하려면 기존의 utf8형식으로는 저장이 안된다.

그 이유는 이모티콘은 4바이트인데 mysql, mariadb에서는 utf8이 3바이트로 설계가 되었기 때문이다. 이 부분에 대한 자세한 설명은 <[MySQL/MariaDB] utf8mb4 언어셋 소개 및 표현범위> 에 아주 자세히 나와있다.

여기서는 간단히 설정만 보도록 하자. MySQL이나 MariaDB는 버전이 5.5이상이 되어야 한다.

기존의 테이블은 utf8로 처리하고 이모티콘이 저장되는 테이블만 utf8mb4로 저장하거나 변경하면 된다. 그리고 my.cnf에서 기존의 utf8부분이 설정된 부분은 막게 아래처럼 utf8mb4로 해준다.

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

참고로 character-set-client-handshake 옵션은 클라이언트의 문자셋을 무시하고 서버쪽 문자셋을 이용하는 것이다. 만약 기존 데이터베이스나 테이블이 CHARSET이 UTF8로 되었다면 utf8mb4로 변경해야 한다.

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;