mysql에 저장할 때, 아이콘, 이모지가 저장 안 되는 문제 해결

 

 

✅, 🔥 이런 이모지를 글에 저장할 때, UTF-8으로 설정했다면 위와 같은 에러 메세지를 받을 수 있다.

 

해결방법은 간단하다.

AWS RDS의 parameter group(파라미터 그룹)을 변경하면 된다.

파라미터 그룹의 편집에 들어가서

character_set으로 검색해서 나온 항목들을 모두

utf8 -> utf8mb4 로 수정한다.

 

그리고 변경 사항 저장을 하기 전에

아래처럼 collation으로 검색해서 나온 결과

collation_connection, collation_server를 

utf8_general_ci -> utf8mb4_unicode_ci 으로 수정한다.

 

RDS 설정을 자동으로 업데이트 하게 해둿다면

RDS 데이터베이스에 수정 중 상태에 있을 것이고

아니라면 재부팅해서 파라미터 그룹이 반영되도록 하면 된다.

 

만약 반영되지 않는다면

EC2에 사용하고 있는 백엔드가 RDS와 제대로 연결되어 있는지 확인하고

그 RDS 데이터베이스가 파라미터 그룹과 연결되어 있는지 확인하기 바란다.

 

내용 추가

 

위 내용으로 적용하고 나서 일부 이모지는 저장이 되지만 일부는 여전히 에러를 발생하는 것으로 확인했다.

우선, 위 설정이 제대로 적용됐는지 확인하자.

SHOW GLOBAL VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

mysql 파라미터 확인

 

여전히 이모지 적용이 안된다면,

파라미터 그룹 수정 외에도 직접 Workbench로 들어가서 아래처럼 설정하면 된다.

ALTER TABLE {테이블이름} CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

sql 쿼리를 실행할 때, 테이블 이름만 사용한다면 database(schema)가 선택되어있는지를 꼭 확인한다.

 

참고로 본 프로젝트는 spring boot 프레임워크를 사용하고 있다.

아래 내용을 application.yml에 추가하기도 했지만 여전히 적용되지 않았다.

하지만 이 설정들도 영향을 줬을지 모르니 추가하겠다.

&character_set_server=utf8mb4&useUnicode=true

  spring:
  	datasource:
            url: jdbc:mysql://{AWS RDS public IP}?useSSL=false&serverTimezone=Asia/Seoul&allowPublicKeyRetrieval=true&character_set_server=utf8mb4&useUnicode=true
            username: {username}
            password: {password}
            driver-class-name: com.mysql.cj.jdbc.Driver
            hikari:
              connection-init-sql: "SET NAMES 'utf8mb4'"

 

참고사항

 

https://www.letmecompile.com/mysql-utf8-utf8mb4-migration/

 

MySQL utf8에서 utf8mb4로 마이그레이션 하기

Emoji같은 글자들은 utf8 인코딩 되는경우 글자당 최대 4bytes까지 필요하다. 하지만 기존 MySQL의 utf8 필드의 경우 글자당 최대 3bytes 까지만 지원하는 한계점이 있었다. 때문에 MySql database에서 utf8mb4

www.letmecompile.com

 

https://velog.io/@dnrgus1127/MySql-데이터베이스에-이모지-문자-저장하기

 

[MySql] 데이터베이스에 이모지 문자 저장하기

데이터베이스에 이모티콘(이모지)를 저장하려면 어떻게 해야 할까?

velog.io