에러
[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); //안녕하세요
}