[MySQL] MySQL에서 Unicode 저장 시 이모지(emoji) 문제
by 스뎅(thDeng) onMySQL에서 유니코드로 이모지를 저장하려면 utf8
(alias for utf8mb3
)이 아닌 utf8mb4
캐릭터셋을 사용해야 한다.
- The
utf8mb4
Character Set (4-Byte UTF-8 Unicode Encoding)- BMP character 지원
- supplementary characters 지원
- 문자당 최대 4 byte 까지 저장공간이 필요할 수 있음
- The
utf8mb3
Character Set (3-Byte UTF-8 Unicode Encoding)- BMP character 지원
- supplementary characters 미지원
- 문자당 최대 3 byte 까지 저장공간이 필요할 수 있음
utf8mb3
대신utf8
로 사용할 수 있음 (alias for)
BMP(Basic Multilingual Plane)
는 일반적으로 많이 사용되는 언어들의 기본 문자판(basic plate)을 뜻한다. 한글 자모나 CJK 같은 한자, Latin-1 supplement(e.g. à, á, â, ã 등) 같은 문자들을 포함한다.
이 기본 문자 외에 자주 사용하지는 않지만 추가로 필요한 문자는 supplementary characters
로 따로 정리되어 있으며, 이모지는 여기에 포함되어 있다.
그래서.. 이모지를 저장하려면 utf8mb4
charset을 사용하면 된다.
참고
- The utf8mb4 Character Set (4-Byte UTF-8 Unicode Encoding) - MySQL Document
- The utf8mb3 Character Set (3-Byte UTF-8 Unicode Encoding) - MySQL Document
- The utf8 Character Set (Alias for utf8mb3)
- Why are we using utf8mb4_general_ci and not utf8mb4_unicode_ci?
- What’s the difference between utf8_general_ci and utf8_unicode_ci
- Plate (Unicode) - Wikipedia
- Emoji - Wikipedia
- Emoticons (Unicode block) - Wikipedia