본문 바로가기

DB

Mysql, MariaDB Incorrect string value 이모티콘 이모지 에러

728x90

푸핫에 맛집을 업로드 하면서 설명에 이모티콘을 넣었는데 컬럼에 데이터를 저장할 수 없다는 Incorrect string value 에러가 나왔다.

 

원인은 간단했다. 테이블에 설정되어있던 charset은 UTF-8이었는데 Mysql과 Mariadb의 경우 UTF-8은 3바이트 가변 인자로 구현되어 최대 3바이트 지원이지만 이모지 문자열이 UTF-8로 인코딩 되는 경우 4바이트가 필요하기 때문이다.

 

이런 문제 해결을 위해 2010년 3월에 가변 4바이트 자료형인 uf8mb4가 나오게 되었다. 따라서 테이블과 컬럼의 charset을 utf8mb4로 collation은 utf8mb4-unicode-ci로 변경하면 된다.

 

테이블 수정 쿼리

alter table 테이블명 convert to character set utf8mb4 collate utf8mb4_unicode_ci

 

푸핫의 경우에 Node.js의 mysql2 패키지를 사용해 디비에 연결하고있는데, charset 설정을 추가했다.

charset:"utf8mb4",

 

 

Mysql이나 Mariadb 서버를 운영하고 있기 때문에 디폴트로 적용된 디비 설정도 수정하기로 했다.

/etc/my.cnf에 설정된 utf8을 utf8mb4로 바꿔주고 utf8-general-ci를 utf8mb4-unicode-ci로 수정

 

내 경우 my.cnf.d에 설정이 분할되어있다.

 

 

수정이 완료되면 꼭 재시작을 해주자.

 

*****추가

테이블의 collate뿐만 아니라 테이블 컬럼들의 collate 또한 같이 바꿔주어야 문제가 해결된다.

show full columns FROM 테이블명

ALTER TABLE 테이블명 MODIFY COLUMN 컬럼명 데이터타입 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci

꼭 수정해주자

 

728x90

'DB' 카테고리의 다른 글

Mysql 인덱스에 대해서  (0) 2022.04.04
Mysql 문자열 나누기 SUBSTRING, SUBSTRING_INDEX  (0) 2021.09.16
MySQL 이벤트 스케줄러 등록  (0) 2021.08.25
MongoDB 설치 - Window  (0) 2020.11.29