Database | utf8 → utf8mb4 인코딩 변경하기
프로젝트를 배포하기 전 여러가지 테스트를 진행하던 중 텍스트를 입력하는 부분, 예컨대 '자기소개', '팀소개', '채팅' 등에서 이모티콘/이모지 입력이 안되는 오류를 발견하였다.
문제의 원인은 DB의 특정 컬럼 Character Set 이 utf8
로 설정되어 있어서이다.
utf8
인코딩이 3 Bytes로 처리되는 반면, 이모지는 65,536 범위를 넘어가서 4 Bytes로 처리되기 때문에 DB에 입력이 안되는 것이다.
문제 해결을 위해 프로젝트에 사용하는 MySql의 데이터베이스, 테이블, 컬럼 에 대한 인코딩 수정을 진행하였다.
# 데이터베이스 수정
ALTER DATABASE [database_name] CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# 테이블 수정
ALTER TABLE [db.table_name] CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 컬럼 수정
ALTER TABLE [db.table_name] CHANGE [column_name] [column_name] VARCHAR(***) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
오류를 수정하면서 보니, 데이터베이스의 인코딩 설정만 변경한다고 해서 오류가 잡히는 것이 아니었다. DB 자체의 인코딩과 더불어 이모지가 사용될만한 테이블/컬럼에 대한 수정이 필요했다.
또한, 특정 테이블에서는 다르게 맞물려 있는 문제때문에 테이블 자체에 대한 인코딩 수정이 안될 때도 있었다. 이때는, 특정 테이블 - 특정 컬럼만 따로 골라서 인코딩을 수정했다. 위의 3번째 코드 블럭의 경우이다.
정상적으로 이모지가 작성되고, DB에도 잘 저장되는 것을 확인할 수 있다.
참고자료
https://solbel.tistory.com/1062
https://nakanara.tistory.com/230
https://blog.naver.com/deersoul6662/222621541412
Author And Source
이 문제에 관하여(Database | utf8 → utf8mb4 인코딩 변경하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yb_engineer/Database-utf8-utf8mb4-인코딩-변경하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)