[오류] mysql 이모지 com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect string value: '\xF0...
728x90
반응형
SMALL
UTF8로 mysql DBMS를 설정해놓았지만 insert하면서 요런 문제가 발생할 수 있다.
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect string value: '\xF0...
차근차근 원인을 찾아보니..
MySQL의 UTF-8 인코딩이 3Byte로 처리되는 캐릭터를 입력하지만, 이모지는 65536 범위를 넘어가서 4byte로 처리될 수 있기에 저런 문제가 발생한다.
이럴때 인코딩 설정을 해줘야하는데 테이블은 물론 컬럼별, 데이터베이스 별로 카테고리를 잡아서 필요에 따라 범위를 정해 인코딩을 지정해줄 수 있다.
이모지를 처리하기 위해 UTF8mb4 인코딩을 사용한다.
UTF8mb4 인코딩을 가지는 DB 생성하기)
CREATE DATABASE deer_database CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON deer_database.* TO 'deer_database'@'localhost' IDENTIFIED BY '비밀번호';
flush privileges; -- flush 잊지 말것~
기존의 DB 인코딩을 UTF8mb4로 변경하기)
ALTER DATABASE deer_database CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
my.cnf 설정 - 윈도우의 경우엔 my.ini)
[mysqld]
collation-server = utf8mb4_unicode_ci
character-set-server = utf8mb4
skip-character-set-client-handshake
이 경우에는 DB 인스턴스를 재시작 해줘야한다.
그러나 이렇게 해주어도 나는 이모지가 안들어가는 버그가 여전히 남아있었는데..
한참을 찾은끝에 방법을 찾을 수 있었다.
mybatis 접속 JDBC 정보 properties에서 URL 뒤에 useUnicode=true를 추가해주고,
...그리고...
characterEncoding=UTF-8을 붙이지않고 뺀다.
5.1.22 이상의 버전에서 characterEncoding=UTF-8이 추가되면 오작동한다고..
characterEncoding=UTF-8을 빼니 잘 돌아갔다..
728x90
반응형
LIST
'MySQL' 카테고리의 다른 글
mysql 문자를 숫자로 변환 (0) | 2023.03.16 |
---|---|
mysql group_concat 여러 행의 데이터를 한 컬럼으로 리턴 (0) | 2023.03.14 |
mysql mybatis 다중 insert 처리하기 (0) | 2023.03.14 |
mysql 테이블, 컬럼 comment 조회 (0) | 2023.03.14 |
키 열 정보를 반환하지 않는 SelectCommand에 대해서는 UpdateCommand에 대한 동적 SQL 생성이 지원되지 않습니다. - 오류 해결 (0) | 2023.03.13 |