취미처럼

[JAVA] [MYSQL] 이모지(Emoji), 이모티콘 오류 본문

에러

[JAVA] [MYSQL] 이모지(Emoji), 이모티콘 오류

sirius 2021. 3. 25. 17:09
Error updating database.  Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\xAB\x96 ' for column 'columnname' at row 1
Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\xAB\x96 ' for column 'columnname' at row 1; 
uncategorized SQLException; SQL state [HY000]; error code [1366]; Incorrect string value: '\xF0\x9F\xAB\x96 ' for column 'columnname' at row 1;
nested exception is java.sql.SQLException: Incorrect string value: '\xF0\x9F\xAB\x96 ' for column 'columnname' at row 1

 

 

이모지(Emoji)나 이모티콘을 저장하는 중 발생하는 인코딩 오류
MYSQL이나 maria db 같은 경우 UTF-8이 3byte이기 때문에 4byte로 구성된 이모지를 저장할 경우 1366 에러가 발생한다.
1. 데이터베이스 or 테이블 or 컬럼의 character set, collate를 utf8에서 utf8mb4로 변경
2. 백엔드(JAVA)에서 처리 (참고 : github.com/vdurmont/emoji-java)

 

<!-- https://mvnrepository.com/artifact/com.vdurmont/emoji-java -->
<dependency>
    <groupId>com.vdurmont</groupId>
    <artifactId>emoji-java</artifactId>
    <version>5.1.1</version>
</dependency>

 

public static void main(String args[]) {

    String originEmoji = "😒🤦‍♀️💖🐱‍💻안녕하세요";

    String aliasEmoji = EmojiParser.parseToAliases(originEmoji);
    System.out.println(aliasEmoji); 	//:unamused::female_facepalm::sparkling_heart::cat:‍:computer:안녕하세요

    String unicodeEmoji = EmojiParser.parseToUnicode(aliasEmoji);
    System.out.println(unicodeEmoji);	//😒🤦‍♀️💖🐱‍💻안녕하세요

    String replaceEmoji = EmojiParser.replaceAllEmojis(originEmoji, "ㅁ");
    System.out.println(replaceEmoji);	//ㅁㅁㅁㅁ‍ㅁ안녕하세요

    String removedEmoji = EmojiParser.removeAllEmojis(originEmoji);
    System.out.println(removedEmoji);	//‍안녕하세요

}

 

 

Comments