[Database TIL 04] MySQL에 emoji 저장하기
20 April, 2022 - Database - 2 min read
emoji를 저장하기 위해서는
- AWS RDS 사용 시 파라미터그룹 편집이 필요함
-
편집 없이 그대로 저장 시
???
<- 이와 같이 제대로 파싱되지 않은 채 저장됨- MySQL character set 기본값이 이모지를 파싱할 수 없는 utf8로 되어있기 때문
- MySQL 5.5.3 버전 이후부터는 utf8mb4를 제공하여 이를 통해 이모지 파싱 및 저장이 가능
- utf8은 한 글자당 최대 3bytes까지 지원하는데, 이모지의 경우 최대 4bytes가 필요하기 때문에 생기는 문제, 따라서 4bytes 문자열 저장이 가능한 utf8mb4를 사용하는 것
SHOW GLOBAL VARIABLES WHERE Variable_name LIKE ‘character\_set\_%’ OR Variable_name LIKE ‘collation%’
<- 현재 데이터베이스의 charater set 설정값을 모두 확인하는 쿼리- 먼저 rds에서 파라미터 그룹 편집
character_set_client : utf8mb4
character_set_connection : utf8mb4
character_set_database : utf8mb4
character_set_results : utf8mb4
character_set_server : utf8mb4
collation_connection : utf8mb4_unicode_ci
collation_server : utf8mb4_unicode_ci
-
설정값 변경 이후 생성되는 테이블만 기본값으로 적용되기 때문에 변경 이전에 생성된 테이블은 따로 charater set 변경이 필요
ALTER TABLE table_name CHARACTER SET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
error case
-
mysql row size too large. the maximum row size for the used table type not counting blobs is 65535
- varchar -> text로 타입 변경하면 해결 가능
-
Illegal mix of collations (utf8_unicode ci, IMPLICIT) and (utf8 general_ci, IMPLICIT) for operation ‘=‘
- 일부 테이블만 utf8mb4로 변경하거나 collation이 통일되지 않은 경우 character set이나 collation이 다른 table끼리 비교나 join을 할때 출력되는 에러 -> 연관되는 테이블끼리는 설정을 통일해주면 해결 가능